数字转圈
题干 | 输入整数 N(1≤N≤9),输出如下 N 阶方阵。 若输入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* | ||
输入样例 | 3 | ||
输出样例 | * 1** 2** 3* * 8** 9** 4* * 7** 6** 5* |
思路:
代码:
#define M 9
#include<stdio.h>
void Print(int a[M][M],int n) {
int i,j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("*%2d*", a[i][j]);
}
printf("\n");
}
}
void fz(int a[M][M], int n) {
int k, hang = 0, lie = 0, hangt, liet, fx=0, wy[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };
for (k = 1; k <= n*n; k++) {
a[hang][lie] = k;
hangt = hang + wy[fx][0];
liet = lie + wy[fx][1];
if (hangt >= n || liet >= n || hangt < 0 || liet < 0 || a[hangt][liet] != 0) {
fx = (fx + 1) % 4;
hangt = hang + wy[fx][0];
liet = lie + wy[fx][1];
}
hang = hangt;
lie = liet;
}
}
int main() {
int a[M][M] = { 0 },n;
scanf("%d", &n);
fz(a, n);
Print(a, n);
return 0;
}