图片分析;
解题思路:
在执行下一步之前先判断下一个格子是否有数已经填进去了并且是否在方阵范围内。
只有在方阵内并且格子里面没有被填过,则填数,否则改变方向
注意事项: 每组测试数据输出结果是蛇形方阵,方阵中每行每两个元素间空格,末尾不要有多余空格,每个方阵后空一行
参考代码:
#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语言训练-立方和不等式 (C语言代码)浏览:748 |
【回文数(二)】 (C语言代码)浏览:728 |
A+B for Input-Output Practice (V) (C++代码)浏览:450 |
母牛的故事 (C语言代码)浏览:435 |
Pascal三角 (C语言代码)浏览:1184 |
字符串的输入输出处理 (C语言代码)浏览:926 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:853 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:698 |
Hello, world! (C++代码)浏览:1744 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:2092 |