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;
}
运行结果:
![](http://hi.csdn.net/attachment/201202/9/0_1328803391ZH5n.gif)