题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5
样例输出
1 3 6 10 15 2 5 9 14 4 8 13 7 12 11
c++解法如下: #include <iostream> using namespace std; int main() { const int N = 101; int arrary[N][N]; /**存储蛇形矩阵*/ int i,j; int n,num,cnt; for (i=0;i<N;i++) { for (j=0;j<N;j++) arrary[i][j]=0; } arrary[0][0]=1; cin >> n; cnt = n-1; num = n*(n+1)*0.5; for (i=0;i<n;i++) { for (j=0;j<n;j++){ if (i+j==cnt) arrary[i][j]=num--; if (i+j==cnt&&j==0) { cnt--; i=0;j=0; } } } for (i=0;i<n;i++) { for (j=0;i+j<=n-1;j++) { if (i+j<=n-1&&i+j+1>n-1) cout << arrary[i][j] ; else cout << arrary[i][j] << " " ; } cout << "
" ; } //cout << "Hello world!" << endl; return 0; } |
第二种蛇形:
#include <iostream> #include "cmath" using namespace std; /* *作者:浅滩 *类型:蛇形矩阵(蓝桥杯普及题) *修改时间:2019.1.29 *题目描述:蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 *程序不足:用到了数组浪费了很多的空间 */ /* 与之前蛇形矩阵有一点不同 1 2 6 7 15 3 5 8 14 4 9 13 10 12 11 */ const int N = 101; int arrary[N][N]; void deal(int &num,int flag,int &cnt,int n) { int i,j; if(flag==1) { for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i+j==cnt) arrary[i][j]=num--; if(i+j==cnt&&j==0)//一斜行赋值完毕 { cnt--; return; } } } } else { for(i=n-1;i>=0;i--){ for(j=0;j<n;j++){ if(i+j==cnt) arrary[i][j]=num--; if(i+j==cnt&&i==0)//一斜行赋值完毕 { cnt--; return; } } } } } int main() { int i,j; int n,num,cnt; for(i=0;i<N;i++) { for(j=0;j<N;j++) arrary[i][j]=0; } cin >> n; cnt = n-1; num = n*(n+1)*0.5; for(i=n-1;i>=0;i--) { deal(num,pow(-1,i),cnt,n); } for(i=0;i<n;i++) { for(j=0;i+j<=n-1;j++) { if(i+j<=n-1&&i+j+1>n-1) cout << arrary[i][j] << " "; else cout << arrary[i][j] << " "; } } return 0; }