旋转矩阵

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

输入格式:第一行输入两个整数n,m中间用空格隔开,接下来n行每行m个整数 ,中间用空格隔开。
1=<n<=200, 1=<m<=200,矩阵中的数都在int范围内)
输出格式:输出m行,每行n个整数中间用空格隔开。
样例输入1:
3 4
-1 3 6 3
7 7 9 1
10 3 4 6
样例输出2:
10 7 -1
3 7 3
4 9 6
6 1 3

代码如下:

#include<iostream>
using namespace std;
int arr[207][207];
int main( )
{
    int n,m;
    cin>> n >> m;
    for(int a = 0; a < n; a++){
        for(int b = 0; b < m; b++){
            cin>>arr[a][b];
        }
    }
    for(int a = 0; a < m; a++){
        for(int b = n-1; b >=0 ; b--){
            if(b == 0)
                cout<<arr[b][a]<<endl;
            else
                cout<<arr[b][a]<<" ";
        }
    }
    return 0;
}
  • 分析题目,题目给出一个n*m的矩阵,那么提到了矩阵脑海里的第一反应是:二维数组。然后将矩阵以90度旋转后输出。可以参考一下题目给出的示例,也就是说我们可以选择两种方法。第一种将矩阵旋转好后存下来依次输出。第二种将矩阵不进行操作,直接根据规律将结果输出出来。
  • 根据图示得出算法,如下:
    如图为矩阵旋转后的结果
    矩阵的长和宽进行了调换,所有在在代码中就要考虑 n 和 m调换的问题。
  • 矩阵的存储
 int n,m;
    cin>> n >> m;
    for(int a = 0; a < n; a++){
        for(int b = 0; b < m; b++){
            cin>>arr[a][b];
        }
    }

-思路
首先矩阵的第一行第二行第三行变换后为矩阵的第三列第二列第一列,所以我们可以直接输出变换后的矩阵。

在这里插入图片描述
可以直接按列输出每一行的数据,也就是说以列为外层循环行为内循环直接输出

    for(int a = 0; a < m; a++){
        for(int b = n - 1; b >= 0; b--){
            if(b == 0)
            cout<<arr[b][a]<<endl;
            else
            cout<<arr[b][a]<<" ";
        }
    }
```注意:如果按列输出那么内层循环应该从 n - 1 开始至 0 结束也就从最后一行开始至第一行结束。
(**每输出一组数据需要换行**
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值