【九度OJ】题目1171:C翻转 解题报告
【九度OJ】题目1171:C翻转 解题报告
标签(空格分隔): 九度OJ
http://ac.jobdu.com/problem.php?pid=1171
题目描述:
首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
操作类型有四种:
1 2 表示:90度,顺时针,翻转4个数
1 3 表示:90度,顺时针,翻转9个数
2 2 表示:90度,逆时针,翻转4个数
2 3 表示:90度,逆时针,翻转9个数
输入:
输入有多组数据。
每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
输出:
输出翻转后的数组。
样例输入:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1 3 1 1
样例输出:
11 6 1 4 5
12 7 2 9 10
13 8 3 14 15
16 17 18 19 20
21 22 23 24 25
Ways
貌似是我做过最傻的题。。看到结果是啥样的就一个数据一个数据的对上号。逆时针90度等于顺时针三次。
另外注意数组的操作,不用显性使用指针,数组名字就是指针。
#include<stdio.h>
void op12(int nums[5][5], int x, int y) {
int temp = nums[x - 1][y - 1];
nums[x - 1][y - 1] = nums[x][y - 1];
nums[x][y - 1] = nums[x][y];
nums[x][y] = nums[x - 1][y];
nums[x - 1][y] = temp;
}
void op13(int nums[5][5], int x, int y) {
int temp1 = nums[x - 1][y - 1];
int temp2 = nums[x][y - 1];
nums[x - 1][y - 1] = nums[x + 1][y - 1];
nums[x][y - 1] = nums[x + 1][y];
nums[x + 1][y - 1] = nums[x + 1][y + 1];
nums[x + 1][y] = nums[x][y + 1];
nums[x + 1][y + 1] = nums[x - 1][y + 1];
nums[x][y + 1] = nums[x - 1][y];
nums[x - 1][y + 1] = temp1;
nums[x - 1][y] = temp2;
}
void op22(int nums[5][5], int x, int y) {
op12(nums, x, y);
op12(nums, x, y);
op12(nums, x, y);
}
void op23(int nums[5][5], int x, int y) {
op13(nums, x, y);
op13(nums, x, y);
op13(nums, x, y);
}
int main() {
int nums[5][5];
while (scanf("%d", &nums[0][0]) != EOF) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 0 && j == 0) {
continue;
}
scanf("%d", &nums[i][j]);
}
}
int cmd1, cmd2;
int x, y;
scanf("%d%d", &cmd1, &cmd2);
scanf("%d%d", &x, &y);
if (cmd1 == 1 && cmd2 == 2) {
op12(nums, x, y);//不用显性使用指针
} else if (cmd1 == 1 && cmd2 == 3) {
op13(nums, x, y);
} else if (cmd1 == 2 && cmd2 == 2) {
op22(nums, x, y);
} else if (cmd1 == 2 && cmd2 == 3) {
op23(nums, x, y);
}
for (int i = 0; i < 5; i++) {
bool isFirst = true;
for (int j = 0; j < 5; j++) {
if (isFirst) {
printf("%d", nums[i][j]);
isFirst = false;
} else {
printf(" %d", nums[i][j]);
}
}
printf("\n");
}
}
return 0;
}
Date
2017 年 3 月 17 日
【九度OJ】题目1171:C翻转 解题报告的更多相关文章
- 九度oj 题目1171:C翻转
题目描述: 首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据. 操作类型有四种: 1 2 表示:90度,顺时 ...
- 九度oj 题目1361:翻转单词顺序
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stu ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
随机推荐
- R包customLayout比例拼图
一个简单的需求: 拼接两个图,一行两列,但不要一样大,让主图占的比例大些(如2/3),另一个图小一些(如1/3) 如上,我想突出曼哈顿图. R相关的拼图函数及包: 基础函数如par(mar =c(3, ...
- mysql order by 多个字段排序实现组内排序
总结:大组在前,小组在后,计量值再最后,即可实现组内排序:下边是参考别人的具体实例: 工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问 ...
- 在前端页面中使用Markdown并且优化a标签
近期在自己的项目中加入了对 Markdown 语法 的支持,主要用到的是markedjs这个项目.该项目托管在github上,地址为:https://github.com/markedjs/marke ...
- 详解工作流框架Activiti的服务架构和组件
摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...
- HDFS【Namenode、SecondaryNamenode、Datanode】
目录 一. NameNode和SecondaryNameNode 1.NN和2NN 工作机制 2. NN和2NN中的fsimage.edits分析 3.checkpoint设置 4.namenode故 ...
- Node.js 概述
JavaScript 标准参考教程(alpha) 草稿二:Node.js Node.js 概述 GitHub TOP Node.js 概述 来自<JavaScript 标准参考教程(alpha) ...
- Android Handler 消息机制原理解析
前言 做过 Android 开发的童鞋都知道,不能在非主线程修改 UI 控件,因为 Android 规定只能在主线程中访问 UI ,如果在子线程中访问 UI ,那么程序就会抛出异常 android.v ...
- Linux系统时钟与硬件时钟
linux系统有两个时钟:一个是由主板电池驱动的硬件时钟(Real Time Clock),也叫做RTC或者叫CMOS时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的: ...
- 转 proguard 混淆工具的用法 (适用于初学者参考)
转自:https://www.cnblogs.com/lmq3321/p/10320671.html 一. ProGuard简介 附:proGuard官网 因为Java代码是非常容易反编码的,况且An ...
- 实现将rsyslog将日志记录与MySQL中
准备两个节点 node3: rsyslog node2: 数据库 准备相应的包 [root@node3 php-fpm.d]#yum install rsyslog-mysql 将数据拷贝到数据 ...