NYOJ:33-蛇形填数
题目描述:
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入描述:
直接输入方陈的维数,即n的值。(n<=100)
输出描述:
输出结果是蛇形方陈。
样例输入:
复制
3
样例输出:
7 8 1
6 9 2
5 4 3
想法:
想法1:
肯定是要有个计步器(1到n*n),关键是怎么控制边界
想法2:
肯定是要有个计步器(1到n*n),只不过不用控制边界,只用检测数组是否已经走过,已经走过则改变方向,按照下左上右的顺序一直走n*n步
代码实现:
想法1:
/*用step控制步数一直到n*n整个阶段分为向下一次,向左向上,向右向下。向左向上一次,右边界下边界减去1向右向下一次,上边界左边界加上1保存到数组,最后通过数组输出这个方法,数组下标从1开始存储(1到n)
*/#include<iostream>
using namespace std;int main()
{int n;cin >> n; //n*n的方阵int store[101][101] = { 0 };int step = 0; //用来计数1到n*nint i = 1, j = n, k = 1, side = n, direction = 0;//i是行,j是列 ,k用来记录向上,向左i,j的最小边界,边长,side用来记录向下向右i,j的最大边界//先向下走一段,之后分为向左向上,向右向下两种情况for (; i <= side; i++){store[i][j] = ++step;}i--;j--;while (step < n*n){switch (((++direction) % 4 + 1)) //顺序:下,左,上,右;switch还是有必要的,因为不知道最后一圈可能凑不够4下{ //左,上,边长一样;右,下,边长一样case 1: //向下的情况for (; i <= side; i++) //最后一下会成为side+1,越界了{store[i][j] = ++step;}i--;j--;//side--; //只有向上的时候边长才会减少break;case 2: //向左的情况for (; j >= k; j--){store[i][j] = ++step;}j++;i--;break;case 3: //向上的情况for (; i >= k; i--){store[i][j] = ++step;}k++;i++;j++;side--;break;case 4: //向右的情况for (; j <= side; j++){store[i][j] = ++step;}j--;i++;break;}}for (int x = 1; x <= n; x++){for (int y = 1; y <= n; y++){cout << store[x][y] << " ";}cout << endl;}return 0;
}
想法2:
/*肯定是要有个计步器(1到n*n),只不过不用控制边界,只用检测数组是否已经走过,已经走过则改变方向,按照下左上右的顺序一直走n*n步这个方法,数组下标从0开始存储(0到n-1)
*/#include<iostream>
using namespace std;int main()
{int n;cin >> n; //n*n的方阵int store[101][101] = { 0 };int step = 0; //用来计数1到n*nint i = 0, j = n - 1;store[i][j] = step = 1; //右上角赋值,因为右上角那个起始点1,在下面的循环的开始无法处理while (step < n*n) //顺序:下左上右{while (i + 1 < n && !store[i + 1][j])store[++i][j] = ++step;while (j - 1 >= 0 && !store[i][j - 1])store[i][--j] = ++step;while (i - 1 >= 0 && !store[i - 1][j])store[--i][j] = ++step;while (j + 1 < n && !store[i][j + 1])store[i][++j] = ++step;}for (int x = 0; x < n; x++){for (int y = 0; y < n; y++){cout << store[x][y] << " ";}cout << endl;}return 0;
}
NYOJ:33-蛇形填数相关推荐
- 紫书 程序 3-3 蛇形填数
页码40页 因为填数字只有一个顺序就是先 下 - 左 - 上 - 右 -下 ... 所以写了四个函数代表四种步骤 执行 下 这个函数 跳出条件有两种 一种是撞墙 另外一种是 撞到自己走过的路 跳出后就 ...
- 2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数
2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数 Ideas 这题其实严格意义上属于一道找规律的题目,并不是啥算法题. 我们可以先按照它的规律多写几行. 1 2 6 7 ...
- 2020年第十一届蓝桥杯 - 省赛 - Python大学组 - D.蛇形填数
这道题同样还是: 2020年第十一届蓝桥杯 - 省赛 - C/C++研究生组 - D.蛇形填数 2020年第十一届蓝桥杯 - 省赛 - Java研究生组 - D.蛇形填数 Ideas 这题其实严格意义 ...
- 计算机精英协会考核题 —— 第二题:蛇形填数
题目 2.蛇形填数 给出 n * n 方阵,要求从 1 开始按顺序依次填写,填写方式如下: n = 4 时, 1 8 9 16 2 7 10 15 3 6 11 14 4 5 12 13 输入 n,请 ...
- 第十一届蓝桥杯A组省赛填空试题 C: 蛇形填数(Java)
试题 C: 蛇形填数 本题总分:10 分 [问题描述] 如下图所示,小明用从 1 开始的正整数"蛇形"填充无限大的矩阵. 容易看出矩阵第二行第二列中的数是 5.请你计算矩阵中第 2 ...
- 信息学奥赛一本通 2045:【例5.13】蛇形填数
[题目链接] ybt 2045:[例5.13]蛇形填数 [题目考点] 1. 二维数组 2. 方向数组(可能用到) int dir[4][2] = {{1,0},{0,-1},{-1,0},{0,1}} ...
- 信息学奥赛一本通(2045:【例5.13】蛇形填数)
2045:[例5.13]蛇形填数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 374 通过数: 191 [题目描述] 在n×nn×n方阵里填入1,2,3 ...
- NYOJ33 - 蛇形填数
描述: 在n*n方陈里填入1,2,-,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入: 直接输入方陈的维数,即n的值.( ...
- 南阳oj入门题-蛇形填数
/** 蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 ...
- 蓝桥杯真题——蛇形填数(c语言)
目录 一.题目描述 二.解题思路 三.程序操作 一.题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 如下图所示,小明用从 1 开始的正整数"蛇形" ...
最新文章
- java操作日志记录_通用日志记录(java)
- TestNG-详解preserve-order的作用与测试case的执行顺序
- html5表单修改颜色,在css中更改输入搜索表单的背景色
- 8种常被忽视的SQL错误用法
- shell 计算代码运行时间
- java jdbc 参数 转义_jdbc URL中的各个参数详解
- 机器学习——周志华(1)
- 深度解读,北斗与综合PNT体系
- ​从ASML年报看半导体产业的未来
- 全球最大多物种水族馆将于5月23日向公众开放,容纳68000多只海洋动物 | 美通社头条...
- 【转】什么是公网安备
- [4G5G基础学习]:流程 - 4G LTE 接入网的随机接入流程
- 暑期实习Day7---SpringMVC
- 一个求索者【无标题】
- Vue快速入门(狂神版)
- springcloud的学习---支付模块消费者
- maya导入abc文件到UE4
- 如何清空linux的DNS缓存,如何清空DNS缓存方法/命令
- 水木资本网 证券娱乐圈诚邀天下英才 打造千万级财经视频主播
- 3.Mapper.xml 详解