题解 | #矩阵交换#

矩阵交换

https://www.nowcoder.com/practice/ec44d4ff8c794b2f9205bdddbde96817

#include <stdio.h>
#
int main() {
    int n, m;
    char t;
    int a, b, k;
    int arr[10][10];
    scanf("%d %d", &n, &m);
    //输入数据储存到二维数组
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    scanf("%d", &k);//按题目要求k行
    for (int i = 0; i < k; i++) {
        scanf(" %c %d %d", &t, &a, &b);  //这里要注意当输入完k后要输入换行符就是回车 前面要加个空格否则换行符会被读入t a和b表示要交换的行或者列 -1则表示对应的二维数组的行或列  这里我用for循环当k不等于1 就代表可能多次转换  每次进入循环如果t是r就换行 t是c换列  别的不用管  if条件语句清晰明了。  
        int t1 = a - 1, t2 = b - 1;
        //这里我们发现每一次的交换总是两行或者两列之间交换,所以如果换行的话就让列从0~n-1列变换,每次交换元素的时候行是固定的就是t1和t2交换  对于列来说也是每次交换列的时候行是固定的也是t1与t2交换
        if (t == 'r') {
            for (int i = 0; i < n; i++) {
                int temp = arr[t1][i];
                arr[t1][i] = arr[t2][i];
                arr[t2][i] = temp;
            }
        }
        if (t == 'c') {
            for (int j = 0; j < n; j++) {
                int temp = arr[j][t1];
                arr[j][t1] = arr[j][t2];
                arr[j][t2] = temp;
            }
        }
    }

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



    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务