【C语言练习题】数字螺旋方阵
题目:
已知n=5、6时的螺旋方阵如输出样例所示,请观察并得到其规律。输入一个正整数n,要求输出n×n个数字构成的螺旋方阵。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个正整数n(n≤20)。
输出格式:
对于每组测试,输出n×n的数字螺旋方阵。各行中的每个数据按4位字符宽度输出。
输入样例:
2 5 6
输出样例:
25 24 23 22 21 10 9 8 7 20 11 2 1 6 19 12 3 4 5 18 13 14 15 16 17 36 35 34 33 32 31 17 16 15 14 13 30 18 5 4 3 12 29 19 6 1 2 11 28 20 7 8 9 10 27 21 22 23 24 25 26
代码实现:
#include <stdio.h>
#include <math.h>
int main()
{
int t, n, a[21][21], i, j, k, top, bottom, left, right, count;
scanf("%d", &t);
for(k = 0; k<t; k++){
scanf("%d", &n);
top = 0;
bottom = n-1;
left = 0;
right = n-1;
count = n*n;
while(left<right&&top<bottom){
for(i = left; i<right; i++){
a[top][i] = count;
count--;
}
for(i = top; i<bottom; i++){
a[i][right] = count;
count--;
}
for(i = right; i>left; i--){
a[bottom][i] = count;
count--;
}
for(i = bottom; i>top; i--){
a[i][left] = count;
count--;
}
top++;
bottom--;
left++;
right--;
}
if(left == right){
a[top][left] = 1;
}
for(i = 0; i<n; i++){
for(j = 0; j<n; j++){
printf("%4d", a[i][j]);
}
printf("\n");
}
}
return 0;
}
注意:n为奇数和偶数时的情况不同需要分别思考。