|
|

#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;}elsemax=n*n/2+n/2+1;while(count<=max){helix[j]=count++;if(m==0){//先往右横走j+=step;if(j>=n||helix[j]!=0){//碰边,换方向m=1;j-=step;j-=step;i+=step;}}else if(m==1){//走对角线 j-=step;i+=step;if(j<0||helix[j]!=0){m=2;i-=step;j+=step; i-=step;}}else{//向上纵向走i-=step;if(helix[j]!=0){//碰边,换方向m=0;i+=step;j+=step;}}}///显示上三角for(i=0;i<n;i++){for(j=0;j<n;j++)if(helix[j]!=0) printf("%-4d",helix[j]);printf("\n");}}
当时考试的时候看到这题,感觉好熟悉,因为之前做过螺旋矩阵的题目,但是一时忘了思路。
后来做了两遍,还好做出来了。。。可能是今天状态不太好吧。。。
另参考:打印螺旋矩阵:
http://touch-2011.iteye.com/blog/1038881
原题:
 |
|