【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ
- 题目描述:
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
- 输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。
接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。
- 输出:
-
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
样例输入:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
【解题思路】这道题目首先给人一种似曾相识的感觉,当完成代码之后发现不对劲,原因就是这次打印的是矩形而不是方阵。所以首先要解决的问题就是当我们在循环的打印每一圈的同时我们怎么保证循环的停止。仔细分析后我们会发现当矩形是m*n时,循环的圈数loop为m、n中较数的一半。且,我们发现若这个较小的数为一个奇数则最后循环打印完成后肯定会剩余一行或者一竖列元素,需要最后单独处理一下。对于每个循环我们维护一个行的最大值hidx和一个列的最大值sidx,便于确定遍历的边界,每次循环从(i,i)元素开始。
AC code:
#include <cstdio>
#include <vector>
using namespace std; int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
vector<vector<int> > vec(m);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
{
int tt;
scanf("%d",&tt);
vec[i].push_back(tt);
}
int hidx=n-1,sidx=m-1,loop=m<n?m/2:n/2,ned=0;
if(m<=n && m%2==1)
ned=-1;
if(n<=m && n%2==1)
ned=1;
int i=0;
for(;i<loop;++i)
{
int idx1=i,idx2=i;
while(idx2<hidx)printf("%d ",vec[idx1][idx2++]);
while(idx1<sidx)printf("%d ",vec[idx1++][idx2]);
while(idx2>i)printf("%d ",vec[idx1][idx2--]);
while(idx1>i)printf("%d ",vec[idx1--][idx2]);
--hidx;
--sidx;
}
if(ned==-1)
for(int j=i;j<=hidx;++j)
printf("%d ",vec[i][j]);
else if(ned==1)
for(int j=i;j<=sidx;++j)
printf("%d ",vec[j][i]);
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1391
User: huo_yao
Language: C++
Result: Accepted
Time:540 ms
Memory:1184 kb
****************************************************************/题目链接:http://ac.jobdu.com/problem.php?pid=1391
九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299
【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ的更多相关文章
- 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 【剑指Offer面试编程题】题目1508:把字符串转换成整数--九度OJ
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n&l ...
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个 ...
- 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ
题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...
- 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...
- 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...
随机推荐
- streamsets 安装
这里有很多坑点 1. 我下载的是rpm 包,full 直接安装, 安装好后,路径在 /opt 目录 2. 启动 -注意报错 2.1 先给他创建 一个 日志目录, 安装好后是不存在这个目录 mk ...
- Centos610安装Nexus
1.下载Nexus 地址: https://pan.baidu.com/s/1D5AI6zmuRBSMK0k7j41VuQ 提取码: q50j 选择02-nexus 2.新建nexus账号 u ...
- mysql5.7修改root密码
use mysql; update mysql.user set authentication_string=password('123456') where user='root'; flush p ...
- 给服务添加路由--ingress
kind: NamespaceapiVersion: v1metadata: name: demo-webshell generateName: demo-webshell labels: ...
- 水平居中显示CSS
HTML代码部分 <div class="center" > <img style="margin:0 auto ;" :src=item.i ...
- Python开发:Python运算符
运算符 1.算数运算: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返 ...
- C、C++ 不得宠,微软正开发新的编程语言!
76 年迭代与更新,编程语言界,谁主沉浮? 在六百多种编程语言中,对于开发者而言,其主观印象中或只有几种主流的编程语言,如 Java.C.C++.C#.新贵 Python 等,而之所以它们能够成为主流 ...
- icos下配置snake test
Topo: # $language = "Python" # $interface = "1.0"# Author:Bing Song# Date:6/21/2 ...
- JAVA高级编程数据源datasource
原文链接 数据源 通过jdbc连接数据库,多建立几条连接放在数据源里面.可以设置数据源的最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等. dbcp数据源 需要的jar包: ...
- Beautisoup库
所看视频: https://www.bilibili.com/video/av9784617/?p=34 一, Beautifulsoup是一个可以从HTML或XML文件中提取数据的Python库,它 ...