题目描述:

在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-蛇形填数相关推荐

  1. 紫书 程序 3-3 蛇形填数

    页码40页 因为填数字只有一个顺序就是先 下 - 左 - 上 - 右 -下 ... 所以写了四个函数代表四种步骤 执行 下 这个函数 跳出条件有两种 一种是撞墙 另外一种是 撞到自己走过的路 跳出后就 ...

  2. 2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数

    2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数 Ideas 这题其实严格意义上属于一道找规律的题目,并不是啥算法题. 我们可以先按照它的规律多写几行. 1 2 6 7 ...

  3. 2020年第十一届蓝桥杯 - 省赛 - Python大学组 - D.蛇形填数

    这道题同样还是: 2020年第十一届蓝桥杯 - 省赛 - C/C++研究生组 - D.蛇形填数 2020年第十一届蓝桥杯 - 省赛 - Java研究生组 - D.蛇形填数 Ideas 这题其实严格意义 ...

  4. 计算机精英协会考核题 —— 第二题:蛇形填数

    题目 2.蛇形填数 给出 n * n 方阵,要求从 1 开始按顺序依次填写,填写方式如下: n = 4 时, 1 8 9 16 2 7 10 15 3 6 11 14 4 5 12 13 输入 n,请 ...

  5. 第十一届蓝桥杯A组省赛填空试题 C: 蛇形填数(Java)

    试题 C: 蛇形填数 本题总分:10 分 [问题描述] 如下图所示,小明用从 1 开始的正整数"蛇形"填充无限大的矩阵. 容易看出矩阵第二行第二列中的数是 5.请你计算矩阵中第 2 ...

  6. 信息学奥赛一本通 2045:【例5.13】蛇形填数

    [题目链接] ybt 2045:[例5.13]蛇形填数 [题目考点] 1. 二维数组 2. 方向数组(可能用到) int dir[4][2] = {{1,0},{0,-1},{-1,0},{0,1}} ...

  7. 信息学奥赛一本通(2045:【例5.13】蛇形填数)

    2045:[例5.13]蛇形填数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 374     通过数: 191 [题目描述] 在n×nn×n方阵里填入1,2,3 ...

  8. 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的值.( ...

  9. 南阳oj入门题-蛇形填数

    /** 蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 ...

  10. 蓝桥杯真题——蛇形填数(c语言)

    目录 一.题目描述 二.解题思路 三.程序操作 一.题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 如下图所示,小明用从 1 开始的正整数"蛇形" ...

最新文章

  1. java操作日志记录_通用日志记录(java)
  2. TestNG-详解preserve-order的作用与测试case的执行顺序
  3. html5表单修改颜色,在css中更改输入搜索表单的背景色
  4. 8种常被忽视的SQL错误用法
  5. shell 计算代码运行时间
  6. java jdbc 参数 转义_jdbc URL中的各个参数详解
  7. 机器学习——周志华(1)
  8. 深度解读,北斗与综合PNT体系
  9. ​从ASML年报看半导体产业的未来
  10. 全球最大多物种水族馆将于5月23日向公众开放,容纳68000多只海洋动物 | 美通社头条...
  11. 【转】什么是公网安备
  12. [4G5G基础学习]:流程 - 4G LTE 接入网的随机接入流程
  13. 暑期实习Day7---SpringMVC
  14. 一个求索者【无标题】
  15. Vue快速入门(狂神版)
  16. springcloud的学习---支付模块消费者
  17. maya导入abc文件到UE4
  18. 如何清空linux的DNS缓存,如何清空DNS缓存方法/命令
  19. 水木资本网 证券娱乐圈诚邀天下英才 打造千万级财经视频主播
  20. 3.Mapper.xml 详解

热门文章

  1. ffmpeg v4l2集成分析
  2. Python基于随机游走模型的PageRank算法及应用
  3. vue文件下载及重命名
  4. 养不起真猫,就用代码吸猫-Unity粒子实现画猫咪
  5. 遥感方向SCI期刊整理
  6. matlab矩阵求逆的模块,matlab矩阵求逆矩阵
  7. 前端高效开发必备——常用js框架和第三方插件
  8. 【直播笔记】在临床研究中,如何利用SAS做更好的统计报表输出
  9. 自然语言处理之——句法分析
  10. python极简讲义(张玉宏著)的几处补充说明