图片分析;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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论