图片分析;
解题思路:
在执行下一步之前先判断下一个格子是否有数已经填进去了并且是否在方阵范围内。
只有在方阵内并且格子里面没有被填过,则填数,否则改变方向
注意事项: 每组测试数据输出结果是蛇形方阵,方阵中每行每两个元素间空格,末尾不要有多余空格,每个方阵后空一行
参考代码:
#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 人评分
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:879 |
字符串比较 (C语言代码)答案错误????浏览:641 |
兰顿蚂蚁 (C++代码)浏览:1160 |
局部变量作函数返回值的问题浏览:1028 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:571 |
矩形面积交 (C语言代码)浏览:1433 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:569 |
C语言训练-字符串正反连接 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:827 |