#include<stdio.h>
int main()
{
int n,i,j,k=1,p,q;
scanf("%d",&n);
int m=n;
int a[n][n];
i=0,j=n-1,p=0,q=1;
while(k<=n*n)
{
while(i<m) a[i++][j]=k++;
while(j>p) a[i-1][--j]=k++;
while(i>q) a[--i-1][j]=k++;
while(j<m-3) a[i-1][++j]=k++;
--m;
i=p,j=m-1,p++,q++;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
P1114 回文方阵
题目描述
在一个 n×n 的方阵中填入 n^2 个数,构成回文方阵
输入描述
输入一个 正整数 n, 占一行
输出描述
输出一个 nxn 的螺旋方阵,每行的数字之间用 1 个空格分开。
样例输入
5
样例输出
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
改成while(k<n*n)试试
用动态数组,供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j;
scanf("%d", &n);
int** array = (int**)malloc(sizeof(int*) * n);
for (i = 0; i < n; i++){
array[i] = (int*)malloc(sizeof(int) * n);
memset(array[i],0,sizeof(int) * n);
}
int k = 1, x = 0, y = n - 1;
array[0][n - 1] = 1;
while (k < n * n)
{
while (x + 1 < n && !array[x + 1][y]) array[++x][y] = ++k;
while (y - 1 >= 0 && !array[x][y - 1]) array[x][--y] = ++k;
while (x - 1 >= 0 && !array[x - 1][y]) array[--x][y] = ++k;
while (y + 1 < n && !array[x][y + 1]) array[x][++y] = ++k;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%4d", array[i][j]);
printf("\n");
}
return 0;
}