蓝桥杯今日份练习

时间:2022-12-21 11:06:21

一、题目:

给出一个n*m的整数矩阵,请你把这个矩阵顺时针旋转90°以后输出。

输入格式:

第一行输入两个整数n,m(1<=n,m<=200).用空格隔开。接下来n行,每行输入m个整数,表示输入的矩阵。矩阵中的元素都是int范围内的整数。

输出格式:

输出m行,每行n个空格隔开的整数,表示旋转以后的矩阵。注意:每行末尾不能输出多余的空格。

样例输入和输出:

蓝桥杯今日份练习

二、思路

首先不能被题目带偏,题目要求旋转90°,我们不可能交换二维数组中元素的值,那样做太麻烦,而且极易出错。

因此我们换一个角度思考,旋转90°,得到一个新的矩阵,我们可以改变二维数组的输出方式,使之成为我们想要的结果。

经观察得,经旋转后的矩阵的每一列都是原来矩阵行的倒序,所以我们可以换个方式输出二维数组里面的元素,而不是改变二维数组的值

三、源码

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int arr[205][205]={0};
//做这种题,不能被带偏,本题将矩阵旋转90,不能将矩阵内的数字进行转换,应该以不同形式去输出样例结果
int main()
{
int row, lie;
cin >> row >> lie;
for (int j=1;j<=row;j++)
{
for (int i=1;i<=lie;i++)
{
cin >> arr[j][i];
}
}
for (int n=1;n<=lie;n++)
{
for (int m=0;m<row;m++)
{
cout << arr[row-m][n]<<' ';//cout输出空格形式
}
cout << endl;
}
return 0;
}