C语言螺旋数字逆矩阵的输出

从键盘输入一个整数(1~20)则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照逆时针螺旋的形式填入其中。例如:输入数字2,则程序输出:2 13 4输入数字3,则程序输出:3 2 14 9 85 6 7输入数字4, 则程序输出:4 3 2 15 14 13 126 15 16 117 8 9 10PS:(请给出代码注释)
2026年09月28日 01:02
有1个网友回答
网友(1):

#include
void main()
{
int n;
int i,j; //i为行,j为列
int k; //k为临时的列数
printf("请输入矩阵的阶数N:\n");
scanf("%d",&n);
int a[50][50];
for(i=0;i {
for(j=0;j a[i][j]=0;
}

// int * *a;
// a=new int[n][n];//a[i-1][j-1]为存储第i行第j列的数
//把矩阵可作多个圈
int first=1; //first为圈的第一个数
//第i圈有4(n-i)个数
//同一个圈对角之和为常数
//所以只要先求左上半圈就好办了

int sum;//对角的和

for(i=1;i {
a[i-1][n-i]=first;//每个圈的第一个数

for(j=i-1;j a[i-1][j]=(first+n-i)-j;//自己想一下就知道为什么了
//上面的三角形。把下面的注释去掉,就可以知道怎么回事了

if(i==1)
first=4*n-3;
else first+=4*(n-2*i+1);

}
/*
for(i=0;i {
for(j=0;j printf("%5d",a[i][j]);
printf("\n");printf("\n");

}printf("\n");printf("\n");printf("\n");
*/

for(i=1;i for(k=i-1;k<=n-i;k++)//列
a[k][i-1]=a[i-1][i-1]+k-(i-1);
/*
for(i=0;i {
for(j=0;j printf("%5d",a[i][j]);
printf("\n");printf("\n");

}printf("\n");printf("\n");printf("\n");
*/

k=k-1;
for(i=1;i {
for(j=i-1;j<=n-i;j++)//在下一半的行
{
a[n-i][j]=a[n-i][i-1]-(i-1)+j;
}

for(j=i;j<=n-i;j++)
{ //列
a[j][n-i]=a[n-i][n-i]+(n-i)-j;

}
}

//输出:
for(i=0;i {
for(j=0;j printf("%5d",a[i][j]);
printf("\n");printf("\n");
}
}