2010-02-09
首先什么是回形数呢,我们先来看个例子你就明白了。
1 | 2 | 3 | 4 | 5 |
16 | 17 | 18 | 19 | 6 |
15 | 24 | 25 | 20 | 7 |
14 | 23 | 22 | 21 | 8 |
13 | 12 | 11 | 10 | 9 |
就是这样的一组数,形状像我们汉字中的“回”字。
解决方法:
下面的代码在VC++6.0中运行通过
#include <stdio.h> #define NUM 7 int 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; }
运行结果: