初学者的练习;如出现过于愚蠢的bug或好的修改可以评论 感谢;
#include<stdio.h>
int main() {
int n,i,j,y=0;
scanf("%d", &n);
int x = n;
int a[n][n];
for(i = 0;i < n;i++){
for(j = 0;j < n;j++){
a[i][j] = 0;
}
}
for (x = n; x > 0; x--) {
for (i = y; i < x ; i++) {
for (j = y; j < x ; j++) {
if (i == y) {
a[i][j] += j + 1 - y;
}
else if (j == x- 1) {
a[i][j] += i + x - y - y;
}
else if (i == x - 1 && j != x - 1) {
a[i][j] += 3 * (x - 1 - y) + 1 - j + y;
}
else if (j == y && i != y) {
a[i][j] += 4 * (x - 1 - y) - i + 1 + y;
}
else {
a[i][j] += 4 * (x - 1 - y) ;
}
}
}
y++;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if(a[i][j] >0 && a[i][j] <= 9){
printf(" %d", a[i][j]);
}
else if(a[i][j] >=10 && a[i][j] <= 99){
printf(" %d", a[i][j]);
}
if (j == n - 1) {
printf("\n");
}
}
}
return 0;
}
关于螺旋方阵可以看作多次输出的正方形框架在if四次判断中可以区分出是框架的哪一端;
对于y,x的问题因为在循环中改变会引起角标的改变进而对手写出的数学代码产生影响;
在此写出的x其实应该是框架最右行的序号进而因该在所有关于x的改变中减去y;(y是专门写来应对影响的)但同时i与j的初始变量的改变要求所有涉及i,j的改变都要减去y来消除影响;
写的麻烦也许有bug望见谅;