【问题描述】
以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
思路:观察可得,偶数矩阵的最大值在左下角,奇数矩阵的最大值在右上角。从最大值,一层一层将它推回1。
完整代码:
#include <iostream>
using namespace std;
int main()
{
int n=0;
cin >> n;
int jz[n][n];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++) jz[i][j]=0;
int be=n*n;
if (n%2==0)
{
int lawer=n/2,b=0,e=n;
while(lawer>0)
{
for (int i=b; i<e; i++) jz[e-1][i] += be--;
for (int i=e-2; i>=b; i--) jz[i][e-1] += be--;
for (int i=e-2; i>=b; i--) jz[b][i] += be--;
for (int i=b+1; i<e-1; i++) jz[i][b] += be--;
lawer--;
b++;
e--;
}
}
else
{
int lawer=n/2+1,b=0,e=n;
while(lawer>0)
{
for (int i=e-1;i>=b;i--) jz[b][i] += be--;
for (int i=b+1; i<e; i++) jz[i][b] += be--;
for (int i=b+1; i<e; i++) jz[e-1][i] += be--;
for (int i=e-2; i>b; i--) jz[i][e-1] += be--;
lawer--;
b++;
e--;
}
}
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++) cout << jz[i][j] << " ";
cout << endl;
}
return 0;
}