#include<stdio.h> void print(int n); void main() { int n; printf("please input n(n<=20):\n"); scanf("%d",&n); print(n); } void print(int n) { int i=0;//x坐标 int j=0;//y坐标 int count=1;//打印的数从1开始 int m=0;//控制方向,等于0是横向,等于1是对角线,等于2是纵向 int step=1;//x,y坐标的步长 int helix[20][20]={0};//要打印的螺旋矩阵 int max;//计算要打印的数中最大的数 if(n%2==0){ max=n*n/2+n/2; }else max=n*n/2+n/2+1; while(count<=max){ helix[i][j]=count++; if(m==0){//先往右横走 j+=step; if(j>=n||helix[i][j]!=0){//碰边,换方向 m=1; j-=step; j-=step; i+=step; } }else if(m==1){//走对角线 j-=step; i+=step; if(j<0||helix[i][j]!=0){ m=2; i-=step; j+=step; i-=step; } }else{//向上纵向走 i-=step; if(helix[i][j]!=0){//碰边,换方向 m=0; i+=step; j+=step; } } } ///显示上三角 for(i=0;i<n;i++){ for(j=0;j<n;j++) if(helix[i][j]!=0) printf("%-4d",helix[i][j]); printf("\n"); } }
当时考试的时候看到这题,感觉好熟悉,因为之前做过螺旋矩阵的题目,但是一时忘了思路。
后来做了两遍,还好做出来了。。。可能是今天状态不太好吧。。。
另参考:打印螺旋矩阵:
http://touch-2011.iteye.com/blog/1038881
原题: