引言: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:图像旋转的更多相关文章

  1. NOI题库 09:图像旋转翻转变换

    NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...

  2. 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起

    话说,平凡之处显真格,这一点也没错!  比如,对旋转图像进行双线性插值,很简单吧?  可,对我,折腾了大半天,也没有达到预期效果!  尤其是三个误区让我抓瞎好久: 1,坐标旋转公式.   这东西,要用 ...

  3. opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移

    常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...

  4. Opencv2.4.4作图像旋转和缩放

    关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...

  5. 每日算法37:Rotate Image (图像旋转)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  6. [google面试CTCI] 1-6.图像旋转问题

    [字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ...

  7. pyhton:图像旋转

    最近一个作业中要用到图像旋转,分享一下学习过程.如有讲错的地方,恳请指正! 图像旋转,想想真简单啊,不就是将图像矩阵乘上一个旋转平移矩阵就完了吗?实际上还真没这么简单.首先这个旋转平移矩阵怎么获得?通 ...

  8. CCF CSP 201503-1 图像旋转 (降维)

    题目链接:http://118.190.20.162/view.page?gpid=T27 问题描述 试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0M ...

  9. 图像旋转、伸缩的自写matlab实现

    一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ...

  10. 图像旋转与图像缩放及Matlab代码实现

    本周的作业是自己通过公式编写图像旋转与缩放的代码.今天先通过调用函数的方法来实现. 图像的旋转: A=imread('2.jpg'); J=imrotate(A, 30); subplot(1,2,1 ...

随机推荐

  1. http://blog.csdn.net/hhhccckkk/article/details/9313999

    http://blog.csdn.net/hhhccckkk/article/details/9313999

  2. 在Win7虚拟机下搭建Hadoop2.6.0+Spark1.4.0单机环境

    Hadoop的安装和配置可以参考我之前的文章:在Win7虚拟机下搭建Hadoop2.6.0伪分布式环境. 本篇介绍如何在Hadoop2.6.0基础上搭建spark1.4.0单机环境. 1. 软件准备 ...

  3. ios应用数据存储方式(归档) - 转

    一.简单说明  1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦.  2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...

  4. Vscode配置C++运行环境(2019/1//11更)并加入bits/stdc++.h头文件

    因为重装系统,以前配置好的c++环境又没了.所以有要配置一遍. 1 下载mingw64或minw, 配置好环境变量:C://mingw64//bin;  在cmd下用g++ -v验证是否成功. 2. ...

  5. 用HANA STADIO 开发ABAP程序

    Help-->Install New Software-->ADD NAME: hana_on_mars Location: https://tools.hana.ondemand.com ...

  6. tidb损坏tikv节点怎么恢复集群

    tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete  store_id .数据一般可以正常访问,但是如 ...

  7. virtual box 故障修复

    vmware ,virtual box等虚拟化环境为一台系统同时允许运行多台系统成为可能准备了技术支持. 通过软件化的平台虚构出硬件设备的驱动,可谓虚拟化技术应用非常广泛. 在平常的虚拟机启动过程中经 ...

  8. Python数值

    一.python数值类型 python数值类型有以下四种: int(整数) float(浮点数) complex(复数) bool(布尔型) 注意:python3取消了long型.  二.python ...

  9. U盘被分区后恢复方法

    一:运行cmd 二:输入diskpart,按enter. 三:输入list disk,按enter. 四:选择优U盘,输入select disk X(X代表磁盘后面的数字0.1,可磁盘的大小来判断数字 ...

  10. Pig关系型运算符例子

    1.新建两个文件A.txt与B.txt, A.txt文件的内容如下: 0,1,2 1,3,4 B.txt文件的内容如下: 0,5,2 1,7,8 将这两个文件上传到目录/zwy/soft 2.定义关系 ...