【剑指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 ...
随机推荐
- linux查看端口占用程序
netstat -apn 查看所有进程和端口的使用情况,看到9000端口和28080端口被java程序占用,PID分别为17607,1442 ps -aux|grep 17607 ps -aux|g ...
- touchstart和click 自动区分
var clickEvent = (function() { if ('ontouchstart' in document.documentElement === true) return 'touc ...
- 使用MQTTBox连接阿里云平台
这篇只做一个简单的介绍,和上一篇没有根本的区别.只是就两个客户端的差异介绍一下. 一.需要参考的内容: 使用MQTT.fx连接阿里云平台: https://www.cnblogs.com/mhtc/p ...
- python学习之HTML
1.HTML初知 <!DOCTYPE html> <html lang="en"> <head> html头 <meta charset= ...
- spring security 方法权限使用
前面我们讲过了使用<security:intercept-url>配置url的权限访问,下面我们讲解一下基于方法的权限使用默认情况下, Spring Security 并不启用方法级的安全 ...
- windows下如何快速删除大文件
rmdir 磁盘:\文件夹的名字 /s /q; eg:rmdir E:\vue_workspace\KB\day08 /s/q /S 表示除目录本身外,还将删除指定目录下的所有子目录和文件. ...
- httpClient简单封装
package com.Interface.util; import java.util.Iterator; import java.util.Map; import org.apache.commo ...
- Educational Codeforces Round 82 B. National Project
Your company was appointed to lay new asphalt on the highway of length nn. You know that every day y ...
- proto school tutorial: blog: lesson 1
https://proto.school/#/blog/01 我们现在希望:把一个post 和他的作者联系起来. 从之前的教程here中,你可以知道, 一个cid 就是代表一个link 比如: { l ...
- Update(Stage4):scala补充知识
1.惰性加载: 在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行.这些SQL语句,如果直接加载到JVM中,会有很大的内存开销.如何解决? 当有一些变量保存的 ...