數字轉圈
?
題干 | 輸入整數? 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;
}
?