这个题目不会做,希望大神给点思路

图片说明

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;
}
运行结果如下:
![图片说明](https://img-ask.csdn.net/upload/201608/24/1472005829_255687.png)