图片分析;QQ截图20220307170805(1).png

解题思路:  


            在执行下一步之前先判断下一个格子是否有数已经填进去了并且是否在方阵范围内。 

            只有在方阵内并且格子里面没有被填过,则填数,否则改变方向

注意事项:     每组测试数据输出结果是蛇形方阵,方阵中每行每两个元素间空格,末尾不要有多余空格,每个方阵后空一行


参考代码:

#include<stdio.h>
int main() {
	int n;
	while (scanf("%d", &n) != EOF) {   //多组测试数据
		int x = 0, y = n - 1, num = 1;   //第一个坐标
		int a[100][100] = {0};    //整个数组的数都为0,后面作为转向条件,如果该坐标已经有输入则不为0
		a[x][y] = num++;                 //将第一个数输入数组
		while (n * n >= num) {           //结束条件
			while (1) {        //向下 
				if (a[x + 1][y] == 0 && x + 1 < n )     //判断下一个坐标是否已经输入,x + 1 < n(边界) 
					a[++x][y] = num++;
				else break;                         //已经有输入或者到达边界则转向 
			}
			while (1) {        //向左 
				if (a[x][y - 1] == 0 && y - 1 >= 0)
					a[x][--y] = num++;
				else break;
			}
			while (1) {        //向上 
				if (a[x - 1][y] == 0 && x - 1 >= 0)
					a[--x][y] = num++;
				else break;
			} 
			while (1) {        //向右 
				if (a[x + 1][y + 1] == 0 && y + 1 < n)
					a[x][++y] = num++;
				else break;
			}
		}
		for ( x = 0; x < n; x++) {
			for ( y = 0; y < n; y++) {                  
				if (y == n - 1)printf("%d", a[x][y]); //末尾不要有多余空格 
				else printf("%d ", a[x][y]); //方阵中每行每两个元素间空格
			}
			printf("\n");
		}
		printf("\n");    //每个方阵后空一行
	}
	return 0;
}


 

0.0分

2 人评分

  评论区

  • «
  • »