7-3 螺旋方阵 (15分)
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
输入样例:
5
输出样例:
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
#include<iostream>
using namespace std;
#include<iomanip>
int main()
{
int n, w, h, wi, hi;//矩阵边长,剩余的宽度、高度,宽和高的下标
int num, cot , cot2, nn;//填入的数字,计数器1、2,填入的个数
cin >> n;
nn = n*n;
//开辟二维数组
int** jz = new int*[n];
for(int i = 0; i < n; i++)
{
jz[i] = new int[n];
}
w = h = n;
wi = hi = 0;
num = 1;
cot2 = 0;
while(cot2 != nn)
{
cot = w;//本次填入w个数字
while(cot2 != nn && cot != 0)
{
jz[hi][wi] = num;
num++;
wi++;//右移
cot--;
cot2++;
}
h--;//调整下标
wi--;//调整下标
hi++;//剩余高度减一
cot = h;
while(cot2 != nn && cot != 0)
{
jz[hi][wi] = num;
num++;
hi++;
cot--;
cot2++;
}
w--;
hi--;
wi--;
cot = w;
while(cot2 != nn && cot != 0)
{
jz[hi][wi] = num;
num++;
wi--;
cot--;
cot2++;
}
h--;
wi++;
hi--;
cot = h;
while(cot2 != nn && cot != 0)
{
jz[hi][wi] = num;
num++;
hi--;
cot--;
cot2++;
}
w--;
hi++;
wi++;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
cout << setw(3) << jz[i][j];
}
cout << endl;
}
for(int j = 0; j < n; j++)
{
delete [] jz[j];
}
delete [] jz;
return 0;
}