顺时针打印数字矩阵

给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素

输入描述

输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。

输出描述:

请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,
3,”),每个矩阵输出完成后记得换行

输入

3 3
1 2 3
4 5 6
7 8 9
-1 -1

输出

1,2,3,6,9,8,7,4,5

备注:
M,N为正整数且 M*N<=300000

其实这样的题目倒是变得更好写,循环读入,然后遍历输出就好了,不用考虑算法的时间复杂度不过关的问题了。因为有逗号的问题,所以我们先输出第一个,然后每次输出的时候是(逗号+数字)这样就保证了输出的格式,并且方便我们对要输出的位置是否正确进行判断;
从(0,0)开始,每次判断他的下一个位置是否是需要输出的数字,输出之后给他赋值成0,表示这个数字已经输出过,然后开始转圈,每次碰到边界或者已经输出过了的数就转弯,代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>using namespace std;const int N = 1010;
int s[N][N];int main()
{while(true){int n, m, x = 0, y = 0;scanf("%d%d",&n, &m);if(n == -1 && m == -1)    return 0;for(int i = 0; i < n; i ++ )for(int j = 0; j < m; j ++ )scanf("%d",&s[i][j]);int tot = n * m, now = 1;printf("%d",s[0][0]);s[0][0] = 0;while(now < tot){while(y + 1 < m && s[x][y + 1]){printf(",%d", s[x][++y]);s[x][y] = 0;now ++;}while(x + 1 < n && s[x + 1][y]){printf(",%d", s[++x][y]);s[x][y] = 0;now ++;}while(y - 1 >= 0 && s[x][y-1]){printf(",%d", s[x][--y]);s[x][y] = 0;now ++;}while(x - 1 >= 0 && s[x-1][y]){printf(",%d", s[--x][y]);s[x][y] = 0;now ++;}}printf("\n");}
}

还有一个类似的,在刚开始接触循环的时候碰到过的一个问题
蛇形填数– 来自《算法竞赛入门经典》

#include<stdio.h>
#include<string.h>#define maxn 20
int a[maxn][maxn];int main()
{int n, x, y, tot = 0;scanf("%d", &n);memset(a, 0, sizeof(a));tot = a[x=0][y=n-1] = 1;while(tot < n*n){while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;} for(x = 0; x < n; x++){for(y = 0; y < n; y++) printf("%3d", a[x][y]);printf("\n");} printf("a[0][%d] = %d\n",n-1, a[0][n-1]);return 0;
}

【哔哩哔哩笔试】顺时针打印数字矩阵相关推荐

  1. 20190911-哔哩哔哩ios开发-笔试

    看了一下行情,感觉哔哩哔哩不缺做后台的,看了一下其他的岗位觉得就ios开发匹配一点点点点点,然后就报的ios开发 笔试两部分:选择题 25题?+ 编程题3题 选择题(单选) 完全不会的:考了有关ios ...

  2. 哔哩哔哩swot分析_哔哩哔哩2020校园招聘游戏运营笔试真题

    在前不久<英雄联盟>S9世界大赛总决赛上,中国FPX战队以3:0横扫欧洲G2最终夺得S9世界冠军,国内玩家万分激动. 总决赛刚结束不久,B站以8亿元价格拍得<英雄联盟>全球总决 ...

  3. 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值

    出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...

  4. 2020哔哩哔哩校招后端开发笔试编程题总结

    2020哔哩哔哩校招后端开发笔试编程题总结 1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9) 暴力求解法: package Day4 ...

  5. 哔哩哔哩2018校招前端笔试

    前言 前几日,哔哩哔哩在电子科大清水河校区举行了校招宣讲会.B站不用多说,中国最大的同性交友网站,不去工作也能去看看. 当晚便进行了部分笔试,下面是我参加的前端笔试试题和我自己的解答,分享给大家. 博 ...

  6. 哔哩哔哩前端笔试(卷1)

    文章目录 哔哩哔哩前端笔试 1. 下面哪个网址和示例符合同源策略 2. 关于DOMContentLoaded和load事件说法正确的是? 3. 如何在 div 容器里展示这几个字符? 4. 以下是哪一 ...

  7. B站哔哩哔哩21届秋招算法岗笔试 假设货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小明使用1024元的纸币购买了一件价值为N(0<N<=1024)的商品

    哔哩哔哩21届秋招算法岗笔试 题目描述: 假设货币系统包含面值1元.4元.16元.64元共计4种硬币,以及面值1024元的纸币.现在小明使用1024元的纸币购买了一件价值为N(0<N<=1 ...

  8. 程序员面试题精选100题(51)-顺时针打印矩阵[算法]

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如:如果输入如下矩阵: 1              2              3              4 5     ...

  9. 面试常备题(三)----顺时针打印矩阵

    最近一直在忙项目,都没有时间准备下个学期的校招,虽然已经有一些小公司主动招我去上班,但我还是想要去大公司里面看看,亲眼见识下那些业界牛人到底是怎样的.所以,也正计划开始做些面试题,打好基础. 基础薄弱 ...

最新文章

  1. 设置Fetch快捷键Ctrl+Alt+Shift+1
  2. php 自带sql防注入函数,php 最简单sql防注入函数与方法_PHP教程
  3. Hibernate中的一段批量插入功能的代码
  4. 程序员面试金典 - 面试题 03.01. 三合一(数组栈)
  5. 为什么文本文件以换行符结尾?
  6. 9.TCP/IP 详解卷1 --- IP 选路
  7. 在rem布局下使用背景图片以及sprite
  8. python复制csv数据_如何使用Python将CSV数据复制到现有xlsx文件
  9. php dom 分离html内容
  10. 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
  11. 浅谈大数据思维——一名管科类学生基于《大数据时代》的思考
  12. Android x86 镜像 安装到 PC 机上
  13. 戴尔易安信引领科技创新,以全面的端到端解决方案助力企业“数”造未来
  14. Cesi运行报错AttributeError: can‘t set attribute
  15. python cookies是什么_Python获取cookie有什么用
  16. 迅捷画图中套用流程图模板编辑方法介绍
  17. 事关健康、教育和工资 | 1月起,这些事有变化 |
  18. 显示器分辨率一直跳_显示器屏幕一直跳怎么办
  19. EMC 电路设计基础
  20. C++四种cast的详细介绍

热门文章

  1. 运放脉冲宽度放大_创鑫激光纳秒级脉冲激光器应用于精细焊接
  2. 高新技术企业补贴政策能通过吗?高新企业补贴什么时候发放
  3. 如何进行文献检索和阅读
  4. 赛意SMOM和金蝶云星空单据接口对接
  5. 51时钟含闹钟(可按键设置)
  6. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解
  7. html原生js实现图片轮播,原生JS实现图片轮播切换效果
  8. 主张:男人害怕的30种女人(zt)
  9. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
  10. 数字验证码识别完成自动化登录