矩阵交换:行列转换,行行转换的实操演练

学习完数组还有循环语句,if语句就可以尝试矩阵交换了。

话不多说,题目如下:

描述

KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。

提示:当t为别的字符时不需要处理

输出描述:

输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。

输出示例:

突破点:无论是行行交换还是行列交换,本质上都是二维数组之间的交换

可以用空瓶法来进行交换,详细内容在往期文章有发布过喔

行行交换:

for (int d = 0; d < m; d++)
            {
                int tmp = arr[a - 1][d];
                arr[a - 1][d] = arr[b - 1][d];
                arr[b - 1][d] = tmp;
            }
        }

行列交换:

for (int e = 0; e < n; e++)
            {
                int tmp = arr[e][a - 1];
                arr[e][a - 1] = arr[e][b - 1];
                arr[e][b - 1] = tmp;
            }

敲黑板!!!

容易忽视的超级重点:

 scanf输入字符时要在%c前加空格

scanf(" %c",&c);
因为进行输入时,会输入一个回车符作为结束,这个时候在输入缓存里就把这个回车字符存在里面了。当你要再读入一个字符时,
就会默认先把缓存里的回车符读入(如果不加空格),加空格就可以利用格式化的输入跳过一个字符,而达到你的目的了。
没有其他更好的解决办法,似乎加一个空格是最方便的方法。

具体代码如下:

#include<stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    int arr[10][10] = { 0 };
    scanf("%d %d", &n, &m);
    int i = 0;
    for (i = 0; i < n; i++)
    {
        int j = 0;
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    int k = 0;
    scanf("%d", &k);
    char t = 0;
    int a = 0;
    int b = 0;
    for (int c = 0; c < k; c++)
    {
        scanf(" %c %d %d", &t, &a, &b);
        if (t == 'r')
        {
            for (int d = 0; d < m; d++)
            {
                int tmp = arr[a - 1][d];
                arr[a - 1][d] = arr[b - 1][d];
                arr[b - 1][d] = tmp;
            }
        }
        else if (t == 'c')
        {
            for (int e = 0; e < n; e++)
            {
                int tmp = arr[e][a - 1];
                arr[e][a - 1] = arr[e][b - 1];
                arr[e][b - 1] = tmp;
            }
        }

    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
     return 0;
}

效果如下:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值