不义游戏(二)

 题目:

描述
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列,为矩阵交换后的结果。每个数后面有一个空格。


示例1
输入:
2 2
1 2
3 4
1
r 1 2
输出:
3 4 
1 2 


示例2
输入:
2 2
1 3
6 8
2
c 1 2
t 1 2
输出:
3 1 
8 6 


说明:
当t为别的字符时不需要处理,所以只交换了原矩阵的第1列和第2列。 

答案及解析: 

c
#include

int main()
{
    int m, n;
    scanf("%d %d", &m, &n); // 输入矩阵的行数和列数
    int a[100][100];
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]); // 输入矩阵的元素
        }
    }
    int k;
    scanf("%d", &k); // 输入操作的次数
    char t;
    int q, p;
    for (int i = 0; i < k; i++)
    {
        getchar();
        scanf("%c %d %d", &t, &q, &p); // 输入操作的类型和需要操作的行(列)号
        if (t == 'r') // 如果是行交换操作
        {
            for (int x = 0; x < n; x++)
            {
                int z = a[q - 1][x]; // z保存第q行的第x个元素的值
                a[q - 1][x] = a[p - 1][x]; // 将第p行的第x个元素的值赋给第q行的第x个元素
                a[p - 1][x] = z; // 将z的值赋给第p行的第x个元素
            }
        }
        else if (t == 'c') // 如果是列交换操作
        {
            for (int x = 0; x < m; x++)
            {
                int z = a[x][q - 1]; // z保存第x行的第q个元素的值
                a[x][q - 1] = a[x][p - 1]; // 将第x行的第p个元素的值赋给第x行的第q个元素
                a[x][p - 1] = z; // 将z的值赋给第x行的第p个元素
            }
        }
        else if (t == 't') // 如果是转置操作
        {
            continue; // 转置操作不需要额外的处理,直接跳过即可
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", a[i][j]); // 输出最终的矩阵
        }
        printf("\n");
    }
    return 0;
}

                                                                                                                                         2023/12/23

你可能感兴趣的:(每日一题,游戏,算法,c语言,学习,经验分享,数据结构)