李怀瑞


私信TA

用户名:2713508392

访问量:2665

签 名:

等  级
排  名 2320
经  验 2273
参赛次数 3
文章发表 9
年  龄 0
在职情况 学生
学  校 lzy
专  业

  自我简介:

图片分析;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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区