http://blog.csdn.net/songzitea/article/details/8779273
楼上的这个可以,但有点小瑕疵。刚刚写了个玩了玩。
#include
#include
using namespace std;
int data[100][100]={0};
enum Direction
{
Left=0,Up,Right,Down//这里的顺序是左上右下,也可以是上右下左,只要是这个规律即可
};
void Calculation(int n)
{
int x,y;
x=y=(n-1)/2;
data[x][y]=1;//1的坐标值
int num=2;//计数
int times=1;//方向前进次数
int n2=n*n;//n的平方
int count=0;
Direction dir=Right;
while (num<=n2)//计数从1开始,所有小于等于
{
for (int i=0;i<times;i++)
{
switch(dir)
{
case Left:
y--;
break;
case Right:
y++;
break;
case Up:
x--;
break;
case Down:
x++;
break;
default:
break;
}
if (num<=n2)//最好加上这一个判断语句
{
data[x][y]=num++;
}
}
//每过两次前进方向加1
if (2==++count)
{
count=0;
times++;
}
dir=(Direction)((dir+1)%4);//改变方向
}
}
void Display(int n)
{
for (int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<setw(2)<<setfill(' ')<<data[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
int number=0;
cout<<"请输入0-10的数字"<<endl;
cin>>number;
Calculation(number);
cout<<"输出为"<<endl;
Display(number);
system("pause");
return 0;
}
运行结果如下:
