CSP201503-1:图像旋转
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。
- 问题描述
 
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
- 输入格式
 
输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。
接下来n行每行包含m个整数,表示输入的图像。
- 输出格式
 
输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
- 样例输入
2 3
1 5 3
3 2 4
 - 样例输出
3 4
5 2
1 3
 - 评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
 
- 源代码(一):使用动态分配的一维数组
 
| 
 /* 一维数组的方式求解,空间动态分配 */ # include <stdio.h> # include <stdlib.h> # include <memory.h> int main(void) { int n; //行数 int m; //列数 scanf("%d", &n); scanf("%d", &m); int count = m*n+1; int *input = (int *)malloc(sizeof(int) * count); memset(input, 0, sizeof(int) * count); int *output = (int *)malloc(sizeof(int) * count); memset(output, 0, sizeof(int) * count); for (int i = 1; i < count; i++) { scanf("%d", input+i); int row_in = (i / m) + 1; int column_in = i % m; if (column_in == 0) { row_in -= 1; column_in = m; } int row_out = m + 1 - column_in; int column_out = row_in; output[(row_out - 1) * n + column_out] = input[i]; } int num = 0; for (int i = 1; i < count; i++) { num += 1; if (num == n) { printf("%d\n", output[i]); num = 0; } else { printf("%d ", output[i]); } } free(input); free(output); return 0; }  | 
- 源代码(二):使用动态分配的二维数组
 
| 
 /* 二维数组的方式求解,空间动态分配 */ # include <stdio.h> # include <stdlib.h> # include <memory.h> int main(void) { int n; //行数 int m; //列数 scanf("%d", &n); scanf("%d", &m); //给输入的二维数据分配空间 int **input = (int **)malloc(sizeof(int *) * n); //给行分配空间 for (int i = 0; i < n; i++) //给列分配空间 { input[i] = (int *)malloc(sizeof(int) * m); memset(input[i], 0, sizeof(int) * m); } //给输出的二维数组分配空间 int **output = (int **)malloc(sizeof(int *) * m); //给行分配空间 for (int i = 0; i < m; i++) //给列分配空间 { output[i] = (int *)malloc(sizeof(int) * n); memset(output[i], 0, sizeof(int) * n); } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &input[i][j]); output[m-1-j][i] = input[i][j]; } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (j == n-1) { printf("%d\n", output[i][j]); } else { printf("%d ", output[i][j]); } } } //回收分配给输入数组的内存 for (int i = 0; i < n; i++) { free(input[i]); } free(input); //回收分配给输出数组的内存 for (int i = 0; i < m; i++) { free(output[i]); } free(output); return 0; }  | 
CSP201503-1:图像旋转的更多相关文章
- NOI题库 09:图像旋转翻转变换
		
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
 - 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
		
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
 - opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
		
常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...
 - Opencv2.4.4作图像旋转和缩放
		
关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...
 - 每日算法37:Rotate Image (图像旋转)
		
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
 - [google面试CTCI] 1-6.图像旋转问题
		
[字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ...
 - pyhton:图像旋转
		
最近一个作业中要用到图像旋转,分享一下学习过程.如有讲错的地方,恳请指正! 图像旋转,想想真简单啊,不就是将图像矩阵乘上一个旋转平移矩阵就完了吗?实际上还真没这么简单.首先这个旋转平移矩阵怎么获得?通 ...
 - CCF CSP 201503-1 图像旋转 (降维)
		
题目链接:http://118.190.20.162/view.page?gpid=T27 问题描述 试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0M ...
 - 图像旋转、伸缩的自写matlab实现
		
一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ...
 - 图像旋转与图像缩放及Matlab代码实现
		
本周的作业是自己通过公式编写图像旋转与缩放的代码.今天先通过调用函数的方法来实现. 图像的旋转: A=imread('2.jpg'); J=imrotate(A, 30); subplot(1,2,1 ...
 
随机推荐
- 【luogu P1514 引水入城】 题解
			
题目链接:https://www.luogu.org/problemnew/show/P1514 // luogu-judger-enable-o2 #include <iostream> ...
 - Vue开发 localhost 替换成 本机ip无法访问
			
新版 vue-cli(@3.10.10) 构建的项目.localhost 替换成本机 ip 地址之后无法访问.但是替换成 127.0.0.1 可以访问 找到 config 文件夹下面的 index.i ...
 - 6.Spring Cloud初相识-------Zool路由
			
前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...
 - iOS:GCD理解1(串行-并行、同步-异步)
			
1.获取并行.创建串行 队列 1-1).获取 并行(全局) 队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t global_qu ...
 - iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱
			
UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...
 - span没有name属性
			
<span id="test" name="测试数据">测试咯</span> 在eclipse中这么写发现会有警告提示.百度发现原来sp ...
 - MySql基本数据类型及约束
			
1. 常用的数据类型(data_type) 字符串类型 CHAR(n) : 固定长度 VARCHAR(n) : 可变长度 NCHAR(n) : 使用utf8存储,固定长度 NVARCHAR(n) : ...
 - 嗨翻C语言笔记(二)
			
~a a中所有位都取反 a & b a中的位 与 b中的位 (都为1则1,否则为0) a | b a中的位 或 b中的位 (只要对应位一个位1则为1) a ^ b a中的位 亦或 b中的位 & ...
 - 最长公共子序列Lcs (51Nod - 1006)
			
20180604 11:28 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,ab ...
 - 【赛时总结】NOIP2018-三校联考1024
			
◇NOIP三校联考-1024◇ 发现以前的博客写得似乎都很水……基本上都没什么阅读量QwQ 决定改过自新╰( ̄ω ̄o) 就从这篇博客开始吧~ 现场考得无地自容,看到题解才发现一些东西……(我第三题还没 ...