【问题描述】
以1为中心,用2,3,4, ..., n, ..., n*n的数字围绕着中心输出数圈, 如若n=4,则
7 8 9 10
6 1 2 11
5 4 3 12
16 15 14 13
【输入形式】
一个整数n(1<=n<=10)
【输出形式】
数圈矩阵
【样例输入】
5
【样例输出】
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
if (n == 1)
cout << "1" << endl;
else
{
int start = -1;
if (n % 2 != 0)
start = n / 2;
else
start = n / 2 - 1;//确定1的位置
int** a = new int* [n];
for (int i = 0; i < n; i++)
a[i] = new int[n];
a[start][start] = 1;
int l = start, r = start;
int flag = 4;//代表四个方向
int sum = 1;
int mark = 2,curr=0;
for (int i = 0; i < n *n; i++)
{
if (flag == 4)//右向
{
a[l][++r] = ++sum;
curr++;
if (curr == mark)
{
flag--;
mark+=2;
curr = 0;
}
else if (curr == mark / 2)
{
flag--;
}
}
else if (flag == 3)
{
a[++l][r] = ++sum;
curr++;
if (curr == mark)
{
flag--;
mark+=2;
curr = 0;
}
else if (curr == mark / 2)
{
flag--;
}
}
else if (flag == 2)
{
a[l][--r] = ++sum;
curr++;
if (curr == mark)
{
flag--;
mark += 2;
curr = 0;
}
else if (curr == mark / 2)
{
flag--;
}
}
else if (flag == 1)
{
a[--l][r] = ++sum;
curr++;
if (curr == mark)
{
flag=4;
mark += 2;
curr = 0;
}
else if (curr == mark / 2)
{
flag--;
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << a[i][j] << ' ';
cout << endl;
}
}
return 0;
}