总时间限制:1000ms 内存限制: 65536kB
描述
生成一个n*n的二维数组,数组里面的数字从左上第一个位置开始,按照顺时针螺旋递减。
如4 * 4的数组。
16 15 14 13
5 4 3 12
6 1 2 11
7 8 9 10
输入
第一行为数字m,表明一共有多少组输入
下面的m行,每行一个数字n
输出
m组二维数组,二维数组要求每个数字不管大小占用3个字符空间,之间用空格隔开。
样例输入
1
4
样例输出
16 15 14 13
5 4 3 12
6 1 2 11
7 8 9 10
ac代码
/*
@File : td_arrary.cpp
@Time : 2020/04/13 21:32:14
@Desc : 魔幻二维数组
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
void creat_td_array(int n, int k, int x, int array[][100])
{
if (n == 0) return;
if (n == 1) array[x][x] = 1;
else
{
for (int i = 0;i < n - 1; i++) array[x][x+i] = k--;
for (int i = 0;i < n - 1; i++) array[x+i][x+n-1] = k--;
for (int i = 0;i < n - 1; i++) array[x+n-1][x+n-1-i] = k--;
for (int i = 0;i < n - 1; i++) array[x+n-1-i][x] = k--;
creat_td_array(n-2,k,x+1,array);
}
}
int main(int argc, char const *argv[])
{
int m, n, k, x;
int array[100][100];
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> n;
creat_td_array(n,n*n,0,array);
for (int j = 0; j < n; j++){
for (int k = 0; k < n; k++)
printf("%3d ",array[j][k]);
cout << endl;
}
}
system("pause");
return 0;
}