蛇行矩阵 Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 Input本题有多组数据,每组数据由一个正整数N组成。(N不大于100) Output对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。 矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。 Sample Input5Sample Output1 3 6 10 152 5 9 144 8 137 1211 整体观察法思想: 先看输出;将它旋转45度你将看到; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 其实这样也可以做解了。但是还有跟好的能看的很清楚的.你再让这组数往左边靠你将看到. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 现在你可以看到什么?你看没行的最后一个元素.1 3 6 10 15.再往斜的继续看得到下行.2 5 9 14.再下.4 8 13.再下.7 12.最后.11.没色做为一行.你再摆下来。 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 不就成了,当然还可以变成向下的蛇型矩阵.我在程序中同样给出来了。也给出了数组转换的过程. 程序: #include <iostream>using namespace std; const int N=100;int main(){ int matrix[N][N]; int n; cout<<"输入矩阵的行数: "; cin>>n; int tag=1;//标记符号。 for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) matrix[i][j]=tag++;//矩阵输入: //蛇型矩阵的转换形式。 cout<<endl; for(i=1;i<=n;i++) { for(int j=1;j<=i;j++) cout<<matrix[i][j]<<" "; cout<<endl; } tag=1; //蛇型矩阵的原型。 cout<<endl; for( i=1;i<=n;i++) { for(int j=i;j<=n;j++) cout<<matrix[j][tag++]<<" "; tag=1; cout<<endl; } //蛇型矩阵向下型。 cout<<endl; for(i=1;i<=n;i++) { for(int j=i;j<=n;j++) cout<<matrix[j][tag]<<" "; tag++; cout<<endl; } return 0;} 程序输出样例: 输入矩阵的行数: 6 12 34 5 67 8 9 1011 12 13 14 1516 17 18 19 20 21 1 3 6 10 15 212 5 9 14 204 8 13 197 12 1811 1716 1 2 4 7 11 163 5 8 12 176 9 13 1810 14 1915 2021Press any key to continue 注:其实很多程序中.你不要只注意每个元素的关系.有时你整体的来看会起到很好的效果的。在ACM的题库中我也看到了很多人的解法.有很多就是看到元素间的增减关系.他们写的也很好,不过我觉得我这样很好理解一些.

评论