问题:打印输出逆时针螺旋矩阵,要求螺旋矩阵的阶数由用户输入。例如 n=4时,输出的螺旋矩阵如下:
这个题目要考虑n的奇偶性,有个人在博客园提问后思考,他用的是Java代码,自己也动手操作了一下,感觉还行吧,贴两个代码,就当是机智题咯。勿喷
#include <iostream> #define max 100 ///让输出的最大值为100 using namespace std; int ans [max][max]; int main() { cout<<"请输入要输出的矩阵的大小,当为0时就结束程序"<<endl; int n; while(cin>>n){ int count = 1; for(int x = 0;x < n/2;x++){ for(int i = x;i < n-x;i++){ ans[i][x]=count++; } for(int i = x+1; i < n-x; i++) {ans[n-1-x][i]=count++; //cout<<count<<" "; } for(int i = x+1; i < n-x; i++) ans[n-i-1][n-1-x]=count++; for(int i = x+1; i < n-x-1; i++) ans[x][n-i-1]=count++; } if(n%2==1)ans[n/2][n/2]=n*n; //将结果进行打印 for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++) cout<<ans[i][j]<<" "; cout<<endl; } } return 0; }
当不考虑奇偶性质的时候,我们知道,问题就是出在最中心的那个单一的点,我的想法就是提前将所有的值初始化为n*n,然后和原来一样操作就可以了。
#include <iostream> #define max 100 ///让输出的最大值为100 using namespace std; int ans [max][max]; int main() { cout<<"请输入要输出的矩阵的大小,当为0时就结束程序"<<endl; int n; while(cin>>n){ for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ ans[i][j]=n*n; } } int count = 1; for(int x = 0;x < n/2;x++){ for(int i = x;i < n-x;i++){ ans[i][x]=count++; } for(int i = x+1; i < n-x; i++) {ans[n-1-x][i]=count++; //cout<<count<<" "; } for(int i = x+1; i < n-x; i++) ans[n-i-1][n-1-x]=count++; for(int i = x+1; i < n-x-1; i++) ans[x][n-i-1]=count++; } //if(n%2==1)ans[n/2][n/2]=n*n; //将结果进行打印 for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++) cout<<ans[i][j]<<" "; cout<<endl; } } return 0; }