『每日一题 2012-02-09』打印回形数 C语言实现

来源:互联网 发布:编译lua源码 编辑:程序博客网 时间:2024/06/03 12:28

2010-02-09

首先什么是回形数呢,我们先来看个例子你就明白了。

12345161718196152425207142322218131211109


就是这样的一组数,形状像我们汉字中的“回”字。
解决方法:
下面的代码在VC++6.0中运行通过
#include <stdio.h>#define NUM 7int main(){enum direction{right,down,left,up};direction dir=(direction)0;int x=0,y=0;int a[NUM][NUM];for (int i=0;i<NUM;i++){for (int j=0;j<NUM;j++){a[i][j]=0;}}int index=1;for (int ge=0;ge<NUM*NUM;ge++){a[x][y]=index++;switch (dir){case right:y+=1;if(y>=NUM || a[x][y]!=0)   //当坐标越界或者坐标已经有数时{dir=direction((dir+1)%4);y-=1;x+=1;}break;case down:x+=1;if(x>=NUM || a[x][y]!=0){dir=direction((dir+1)%4);x-=1;y-=1;}break;case left:y-=1;if(y<0 || a[x][y]!=0){dir=direction((dir+1)%4);y+=1;x-=1;}break;case up:x-=1;if(x<0 || a[x][y]!=0){dir=direction((dir+1)%4);y+=1;x+=1;}break;}}for (int m=0;m<NUM;m++){for (int n=0;n<NUM;n++){printf("%-3d",a[m][n]);if (n==NUM-1){printf("\n");}}}return 0;}

运行结果: