【C++_OJ_指针】矩阵左转(指针与数组)

题目描述

输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出

比如现在有2*3矩阵 :

1 2 3

4 5 6

向左旋转90度后的矩阵变为:

3 6

2 5

1 4

要求:除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针

提示:m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算

输入

第一行输入t表示有t个测试实例

连续两行输入一个2*3的矩阵的数据

依次输入t个实例

输出

依次输出左转后的矩阵结果

在输出的每行中,每个数据之间都用空格隔开,最后一个数据后面也带有空格

输入样例1

2
1 2 3
4 5 6
4 5 6
7 8 9

输出样例1

3 6
2 5
1 4
6 9
5 8
4 7

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        //使用二维数组创建和输入矩阵
        int i,j;
        int num[2][3] = {0};
        for(i=0;i<2;i++)
        {
            for(j=0;j<3;j++)
            {
                cin >> num[i][j];
            }
                
        }
        
        //进行旋转并输出
        for(i=2;i>=0;i--)
        {
	 	    for(j=0;j<2;j++)
            {
		 	    cout<< num[j][i]<<" ";
		 	    if(j==1) 
                cout<<endl;
		    }
	    }
            
    }
    
    return 0;

}

### 回答1: 题目描述:翻转矩阵。输入一个矩阵,将矩阵顺时针翻转180。包括多组输入输出,第一行输入两个数字n和m,表示下面输入的是一个n*m的矩阵。接下来n行输入矩阵,最后输出翻转后的矩阵。 例如: 输入: 3 3 1 2 3 4 5 6 7 8 9 输出: 9 8 7 6 5 4 3 2 1 解析:将矩阵顺时针旋转180,即先上下翻转,再左右翻转。具体实现可以先上下翻转,再沿着对角线翻转即可。 ### 回答2: 翻转矩阵实际上就是将矩阵旋转180。我们可以通过以下步骤来实现: 1. 首先读入一个矩阵矩阵的行数为n,列数为m。 2. 然后我们将矩阵的第i行和第n-i行交换位置,这样就完成了上下翻转。 3. 接着我们将矩阵的第j列和第m-j列交换位置,这样就完成了左右翻转。 4. 最后输出翻转后的矩阵即可。 以下是代码实现: ```python n, m = map(int, input().split()) matrix = [] for i in range(n): row = list(map(int, input().split())) matrix.append(row) # 上下翻转 for i in range(n // 2): matrix[i], matrix[n-i-1] = matrix[n-i-1], matrix[i] # 左右翻转 for i in range(n): for j in range(m // 2): matrix[i][j], matrix[i][m-j-1] = matrix[i][m-j-1], matrix[i][j] # 输出结果 for i in range(n): for j in range(m): print(matrix[i][j], end=' ') print() ``` 如果我们输入以下样例: ``` 3 4 1 2 3 4 5 6 7 8 9 10 11 12 ``` 则输出结果为: ``` 12 11 10 9 8 7 6 5 4 3 2 1 ``` 可以看到,矩阵已经完成了顺时针翻转180。 ### 回答3: 翻转矩阵,指的是将一个矩阵沿着中心对称轴旋转180。具体方法是先将矩阵上下翻转(即第一行和最后一行交换,第二行和倒数第二行交换,以此类推),然后再左右翻转(即矩阵中每行的元素顺序反转)。这样做后,矩阵就被顺时针翻转了180。 对于这个问题,我们可以按照以下步骤来实现: 1. 读入矩阵的行数n和列数m。 2. 创建一个n*m的数组matrix,用于存储输入的矩阵。 3. 读入矩阵的元素,并存储到数组matrix中。 4. 对矩阵进行上下翻转: - 从第一行向下遍历到第n/2行,对于每一行,将它和第n-i+1行交换。 5. 对矩阵进行左右翻转: - 对于每一行,从第一列向右遍历到第m/2列,对于每一个位置,将它和第m-j+1列交换。 6. 输出翻转后的矩阵。 具体实现请见以下代码: ```python n, m = map(int, input().split()) matrix = [list(map(int, input().split())) for i in range(n)] # 上下翻转 for i in range(n // 2): matrix[i], matrix[n - i - 1] = matrix[n - i - 1], matrix[i] # 左右翻转 for i in range(n): for j in range(m // 2): matrix[i][j], matrix[i][m - j - 1] = matrix[i][m - j - 1], matrix[i][j] # 输出翻转后的矩阵 for i in range(n): for j in range(m): print(matrix[i][j], end=' ') print() ``` 需要注意的是,在实现时,我们可以只处理矩阵的前一半行和前一半列,因为矩阵的后一半行和后一半列已经被交换过了。另外,要注意输出时的格式,可以在每个元素后面加一个空格来区分不同的元素,以免输出的矩阵看起来杂乱无章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ferry_xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值