【哔哩哔哩笔试】顺时针打印数字矩阵
顺时针打印数字矩阵
给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素
输入描述
输入第一行是两个数字,分别代表行数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;
}
【哔哩哔哩笔试】顺时针打印数字矩阵相关推荐
- 20190911-哔哩哔哩ios开发-笔试
看了一下行情,感觉哔哩哔哩不缺做后台的,看了一下其他的岗位觉得就ios开发匹配一点点点点点,然后就报的ios开发 笔试两部分:选择题 25题?+ 编程题3题 选择题(单选) 完全不会的:考了有关ios ...
- 哔哩哔哩swot分析_哔哩哔哩2020校园招聘游戏运营笔试真题
在前不久<英雄联盟>S9世界大赛总决赛上,中国FPX战队以3:0横扫欧洲G2最终夺得S9世界冠军,国内玩家万分激动. 总决赛刚结束不久,B站以8亿元价格拍得<英雄联盟>全球总决 ...
- 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值
出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...
- 2020哔哩哔哩校招后端开发笔试编程题总结
2020哔哩哔哩校招后端开发笔试编程题总结 1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9) 暴力求解法: package Day4 ...
- 哔哩哔哩2018校招前端笔试
前言 前几日,哔哩哔哩在电子科大清水河校区举行了校招宣讲会.B站不用多说,中国最大的同性交友网站,不去工作也能去看看. 当晚便进行了部分笔试,下面是我参加的前端笔试试题和我自己的解答,分享给大家. 博 ...
- 哔哩哔哩前端笔试(卷1)
文章目录 哔哩哔哩前端笔试 1. 下面哪个网址和示例符合同源策略 2. 关于DOMContentLoaded和load事件说法正确的是? 3. 如何在 div 容器里展示这几个字符? 4. 以下是哪一 ...
- 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 ...
- 程序员面试题精选100题(51)-顺时针打印矩阵[算法]
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如:如果输入如下矩阵: 1 2 3 4 5 ...
- 面试常备题(三)----顺时针打印矩阵
最近一直在忙项目,都没有时间准备下个学期的校招,虽然已经有一些小公司主动招我去上班,但我还是想要去大公司里面看看,亲眼见识下那些业界牛人到底是怎样的.所以,也正计划开始做些面试题,打好基础. 基础薄弱 ...
最新文章
- 设置Fetch快捷键Ctrl+Alt+Shift+1
- php 自带sql防注入函数,php 最简单sql防注入函数与方法_PHP教程
- Hibernate中的一段批量插入功能的代码
- 程序员面试金典 - 面试题 03.01. 三合一(数组栈)
- 为什么文本文件以换行符结尾?
- 9.TCP/IP 详解卷1 --- IP 选路
- 在rem布局下使用背景图片以及sprite
- python复制csv数据_如何使用Python将CSV数据复制到现有xlsx文件
- php dom 分离html内容
- 计算机网络与综合布线系统设计,浅谈计算机网络综合布线系统设计
- 浅谈大数据思维——一名管科类学生基于《大数据时代》的思考
- Android x86 镜像 安装到 PC 机上
- 戴尔易安信引领科技创新,以全面的端到端解决方案助力企业“数”造未来
- Cesi运行报错AttributeError: can‘t set attribute
- python cookies是什么_Python获取cookie有什么用
- 迅捷画图中套用流程图模板编辑方法介绍
- 事关健康、教育和工资 | 1月起,这些事有变化 |
- 显示器分辨率一直跳_显示器屏幕一直跳怎么办
- EMC 电路设计基础
- C++四种cast的详细介绍
热门文章
- 运放脉冲宽度放大_创鑫激光纳秒级脉冲激光器应用于精细焊接
- 高新技术企业补贴政策能通过吗?高新企业补贴什么时候发放
- 如何进行文献检索和阅读
- 赛意SMOM和金蝶云星空单据接口对接
- 51时钟含闹钟(可按键设置)
- springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解
- html原生js实现图片轮播,原生JS实现图片轮播切换效果
- 主张:男人害怕的30种女人(zt)
- 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
- 数字验证码识别完成自动化登录