蛇形矩阵(二)
蛇形矩阵
【问题描述】
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
【要求】
【数据输入】本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
【数据输出】对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
【样例输入】
5
【样例输出】
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
#include <iostream> using namespace std; int a[1010][1010]={0}; //将矩阵的初值置为0; int main() { int i=0,j=0,n; int k=0; int x,y; cin>>n; int t=1; a[0][0]=t; //矩阵的第一行第一列是1; while(t<=n*(n+1)/2) //上三角矩阵的元素个数为(n+1)*n/2; { a[++k][0]=++t; //置数给每一行的第一个位置; i=k; j=0; while(i<n&&(j+1)<n&&!a[i-1][j+1]) //判断一下i是否超出了n的范围,因为上述的a[++k][0]=++t;其实将所有的第一列都执行了,这里的i<n只是截取我们所需要的而已; a[--i][++j]=++t; //++ --都是前; } for(x=0;x<n;x++) { cout<<endl; for(y=0;y<n;y++) { if(a[x][y]) cout<<a[x][y]<<" "; } cout<<endl; } return 0; }