c语言数字转圈

数字转圈

c语言数字转圈_第1张图片

 

题干 输入整数  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*

思路:

c语言数字转圈_第2张图片

代码:

#define M 9
#include
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;
}

 

你可能感兴趣的:(c语言,算法,数据结构)