#include
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
for(j=0;j
if(helix[i][j]!=0)
printf("%-4d",helix[i][j]);
printf("\n");
}
}
当时考试的时候看到这题,感觉好熟悉,因为之前做过螺旋矩阵的题目,但是一时忘了思路。
后来做了两遍,还好做出来了。。。可能是今天状态不太好吧。。。
另参考:打印螺旋矩阵:
原题: