所谓“螺旋方阵”,是指对任意给定的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<stdio.h>
int main()
{
int n;
int x=1;
scanf("%d",&n);
int a[n][n];
int i=0,j=0,c=0;
for(int k=0;k<n+1/2;k++){
//上层的循环
for(;j<(n-c);j++){
a[i][j]=x;
x++;
}
//右侧的循环
i++;
j--;
for(;i<n-c;i++){
a[i][j]=x;
x++;
}
//底层循环
i--;
j--;
for(;j>=c;j--){
a[i][j]=x;
x++;
}
//左侧的循环;
i--;
j++;
for(;i>c;i--){
a[i][j]=x;
x++;
}
c++;
i++;
j++;
}
for(int o=0;o<n;o++){
for (int p=0;p<n;p++){
printf("%3d",a[o][p]);
}
printf("\n");
}
}
网上的思路
#include<stdio.h>
int main(){
int N,m=1;
int i,j,k,z,c;
int a[10][10]={0};
scanf("%d",&N);
for(c=0;c<=N/2+1;c++){
for(i=c;i<N-c;i++){
a[c][i]=m++;
}
for(j=c+1;j<N-c;j++){
a[j][N-1-c]=m++;
}
for(k=N-2-c;k>=c;k--){
a[N-1-c][k]=m++;
}
for(z=N-2-c;z>c;z--){
a[z][c]=m++;
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%3d",a[i][j]);
}
printf("\n");
}
}