积累编程思想之--题目:矩阵转换

题目:

描述

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

输入描述:

第一行包含两个整数nm,表示一个矩阵包含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'时代表进行(xing,这里容易把题读错,不是行列,是进行‘列’)列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。

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

输出描述:

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

示例1

输入:

2 2
1 2
3 4
1
r 1 2

复制输出:

3 4 
1 2 

编程思维:

        1,首先我们读完题,要把具体的问题抽象到脑海里,然后在去看题目和我们所抽象出来的是否一致,或者缺少哪些条件,最后具体化步骤。

        2,抽象该题目:就是要先一个矩阵要给它进行行,列变换。

        3,读题目条件:由题可知:输入分三行,分别是:第一行:输入n*m的矩阵,第二行:输入它n*m个元素(赋值到对应行列上),第三行:输入一个值k表示要操作行或者列变换的次数,输入字符r表示行行变换,字符c进行 列 变换,a和b是需要互换的行或者列。

        4,具体化步骤

        1,首先要获取一个矩阵,我们要创建一个二维数组(1≤n≤10,1≤m≤10),创建变量n,m,用scanf输入语句进行赋值。确定行和列。

        2,用双重循环以n,m为条件进行遍历,赋值。

        3,定义变量k,然后用scanf语句确定好要输入的操作次数。

        4,设置while循环,条件为k(操作次数),并且每次循环减1,当k为0时循环跳出,

        5,循环里用scanf'语句确定字符,行号(列号),行号(列号)的值。循环体里进行,行行或者列列的交换。

        6,循环打印这个矩阵。

一下是实现代码:

#include <stdio.h>

int main() {
    int n=0,m=0;
    int arr[11][11] = { 0 };
    scanf("%d %d",&n,&m);
    int i = 0;
    int j = 0;
    //输入n*m个数字
    for(i = 0;i<n;i++){
        for(j = 0;j<m;j++){
            scanf("%d",&arr[i][j]);
        }
    }
    int t = 0;  //变化的次数
    int a = 0; //输入变化的行号(也或者是列号)
    int b = 0; //输入变化的列号(也或者是列号)
    int temp =0; //用来交换的杯子
    char flag = 'r';  //表示进行  列   变换,r表示行行变换
    scanf("%d",&t);
    while(t){
        scanf(" %c %d %d",&flag,&a,&b); //这里读取%c的时候要注意清空空格,不然会都读成字符
        a--;b--;
        //行行交换
        if(flag == 'r'){
           for(j = 0;j<n;j++){
                temp = arr[a][j];
                arr[a][j] = arr[b][j];
                arr[b][j] = temp;
           }
        }
        //列列交换
        if(flag == 'c'){
            for(i = 0;i<m;i++){
                temp = arr[i][a];
                arr[i][a] = arr[i][b];
                arr[i][b] = temp;
            }

        }
        t--;
    }

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

注意事项:

1,要清空缓冲区:在scanf括号里面”最前面打个空格。

2,a和b要--,因为我们输入的行号或者列号是从1开始的,计算机数组是从0开始读取的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值