CCF NOI1049. 旋转图像

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

题目描述

输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。

输入

第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。

输出

m行,每行n个整数,为顺时针旋转90度后的图像。相邻两个整数之间用单个空格隔开。

样例输入

3 3
1 2 3
4 5 6
7 8 9

样例输出

7 4 1
8 5 2
9 6 3

数据范围限制

1 <= n <= 100,1 <= m <= 100。

 

题记:

这道题用数组模拟来做,重要的是找到规律。

直接看样例的数字不容易发现规律。用a[n][m]来写。找下标规律就很明显了。

比如a[2][3]:

 

a[0][0]  [0][1]  a[0][2]  a[0][3]                                  a[2][0]  a[1][0]  a[0][0]

a[1][0]  [1][1]  a[1][2]  a[1][3]            旋转后:        a[2][1]  a[1][1]  a[0][1]

a[2][0]  [2][1]  a[2][2]  a[2][3]                                  a[2][2]  a[1][2]  a[0][2]

                                                                               a[2][3]  a[1][3]  a[0][3]

这样规律就很明显了。

(ps:样例打字打的好辛苦……)

 

C++程序如下:

#include <iostream>
using namespace std;

int main(void)
{
	int n, m, i, j;
	
	cin >> n >> m;
	int a[n][m];
	
	for(i=0; i<n; i++)
	    for(j=0; j<m; j++)
	    	cin >> a[i][j];
		
	for(i=0; i<m; i++){
		for(j=n-1; j>=0; j--)
	        cout << a[j][i] << " ";
	    cout << endl;
	}
	
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值