首页 > 试题广场 >

矩阵交换

[编程题]矩阵交换
  • 热度指数:25773 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

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列。 
#include <stdio.h>

int main() {
    int n = 0, m = 0;
    scanf("%d%d", &n, &m);
    int arr[10][10] = { 0 };
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    int k = 0;
    scanf("%d", &k);
    char a;
    int b = 0, c = 0;
    for(int i = 0; i < k; i++)
    {
        scanf(" %c%d%d", &a, &b, &c);
        while(a == 'c' || a == 'r')
        {
            if (a == 'r')
            {
	            for (int j = 0; j < m; j++)
	            {
		            int tmp = arr[b-1][j];
		            arr[b-1][j] = arr[c-1][j];
		            arr[c-1][j] = tmp;
	            }
            }
            else if (a == 'c')
            {
	            for (int i = 0; i < n; i++)
	            {
		            int tmp = arr[i][b-1];
		            arr[i][b-1] = arr[i][c-1];
		            arr[i][c-1] = tmp;
	            }
            }
            break;
        }
    }
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

发表于 2024-08-15 23:06:58 回复(0)
#include<stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int arr[n][m];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    int k;
    scanf("%d", &k);

    for (int num = 0; num < k; num++) {
        char c;
        int x, y;
        scanf(" %c %d %d", &c, &x, &y);// 注意空格,忽略前面的换行符

        if (c == 'r') {
            for (int i = 0; i < m; i++) {
                int tmp = arr[x - 1][i];
                arr[x - 1][i] = arr[y - 1][i];
                arr[y - 1][i] = tmp;
            }
        } else if (c == 'c') {
            for (int i = 0; i < n; i++) {
                int tmp = arr[i][x - 1];
                arr[i][x - 1] = arr[i][y - 1];
                arr[i][y - 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;
}

发表于 2024-08-10 16:24:49 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    int arr[10][10]={10};
    scanf("%d%d",&a,&b);
    for (int i=0; i<a; i++) {
        for (int j=0; j<b; j++) {
            scanf("%d",&arr[i][j]);
        }
    }
    int m=0;
    char c1=0;
    int c,d;
    scanf("%d", &m);
    for (int i=0; i<m; i++) {
        scanf(" %c %d %d", &c1, &c, &d);
        if (c1=='r') {
            for (int j=0;i<b ; i++) {
                int tmp=arr[c-1][i];
                arr[c-1][i]=arr[d-1][i];
                arr[d-1][i]=tmp;
            }
        }
        else if (c1=='c') {
            for (int j=0; j<a; j++) {
                int tmp=arr[j][c-1];
                arr[j][c-1]=arr[j][d-1];
                arr[j][d-1]=tmp;
            }
        }
    }
    for(int i=0 ;i<a ;i++) {
        for(int j=0 ;j<b ;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}
为啥总是有一些过不去
编辑于 2024-04-12 20:16:54 回复(1)
#include <stdio.h>
#include <malloc.h>

int main()
{
    //矩阵的行与列
    int n = 0;
    int m = 0;
    //指向矩阵的指针
    int* p = NULL;
    //控制循环的变量
    int i = 0;
    int j = 0;
    int z = 0;
    //第3次输入的指令
    int k = 0;
    char t = 0;
    int a = 0;
    int b = 0;
    int tem = 0;

    scanf("%d%d", &n, &m);

    //开辟空间
    p = (int*)malloc(sizeof(int) * n * m);
    if (!p)
    {
        perror("malloc:p");
        return 1;
    }

    //录入矩阵
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", p + (i * m) + j);
        }
    }

    scanf("%d", &k);

    for (z = 0; z < k; z++)
    {
        scanf(" %c%d%d", &t, &a, &b);

        a -= 1;
        b -= 1;

        //换行
        if (t == 'r')
        {
            for (j = 0; j < m; j++)
            {
                tem = *(p + (a * m) + j);
                *(p + (a * m) + j) = *(p + (b * m) + j);
                *(p + (b * m) + j) = tem;
            }
        }
        //换列
        else if (t == 'c')
        {
            for (i = 0; i < m; i++)
            {
                tem = *(p + (i * m) + a);
                *(p + (i * m) + a) = *(p + (i * m) + b);
                *(p + (i * m) + b) = tem;
            }
        }
    }

    //输出结果
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d ", *(p + (i * m) + j));
        }
        printf("\n");
    }

    //释放内存
    free(p);
    p = NULL;

    return 0;
}

编辑于 2024-03-20 18:25:35 回复(0)
#include <stdio.h>

int main() {
    int n,m;
    scanf("%d %d",&n,&m);
    int i,j;
    int arr[n][m];
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            scanf("%d",&arr[i][j]);
    }
    int k,temp;
    scanf("%d",&k);
    int a,b;char t;
    for(i=0;i<k;i++)
    {
        scanf(" %c %d %d",&t,&a,&b); 
		a--;b--; //出错点
        if(t=='r')//行变换
        {
            for(j=0;j<m;j++)
            {
                temp=arr[a][j];
                arr[a][j]=arr[b][j];
                arr[b][j]=temp;
            }
        } 
        if(t=='c')//列变换
        {
            for(j=0;j<n;j++)
            {
                temp=arr[j][a];
                arr[j][a]=arr[j][b];
                arr[j][b]=temp;
            }
        }    
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            printf("%d ",arr[i][j]);
        printf("\n");
    }
    return 0;
}答题思路是写出来的,但一直出错,最后和答案对比时发现是下标没有对上,在代码中的出错点上
发表于 2024-02-27 17:29:59 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int arr[n][m];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%d", &arr[i][j]);
        }
    }
    char t;
    int p, q;
    while(scanf(" %c %d %d", &t, &p, &q) != EOF){
        p--;
        q--;
        if(t == 'r'){
            for(int j=0; j<m; j++){
                int temp = arr[p][j];
                arr[p][j] = arr[q][j];
                arr[q][j] = temp;
            } 
        }
        if(t == 'c'){
            for(int i=0; i<n; i++){
                int temp = arr[i][p];
                arr[i][p] = arr[i][q];
                arr[i][q] = temp;
            } 
        }
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2024-02-09 16:23:43 回复(0)
#include<stdio.h>
int main() {
    int m = 0;//列
    int n = 0;//行
    int arr[10][10] = { 0 };
    int cnt = 0;//操作的次数
    char op = 0;//代表操作的字符
    int a = 0;
    int b = 0;
//读取数据
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    scanf("%d", &cnt);
    for (i = 0; i < cnt; i++) {
//读取操作指令
//注释解释:
//scanf("%d", &a);
//scanf(" %c", &c); // 消耗 %d 后的所有后继空白符,然后读一个 char
        scanf(" %c %d %d", &op, &a, &b);
//执行操作
        if (op == 'r') {
//交换a和b行
            for (j = 0; j < m; j++) {
                int tmp = arr[a - 1][j];
                arr[a - 1][j] = arr[b - 1][j];
                arr[b - 1][j] = tmp;
            }
        } else if (op == 'c') {
//交换a和b列
            for (j = 0; j < n; j++) {
                int tmp = arr[j][a - 1];
                arr[j][a - 1] = arr[j][b - 1];
                arr[j][b - 1] = tmp;
            }
        }
    }
//输出
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2024-01-24 23:15:18 回复(0)
#include <stdio.h>

int main() {
    int m,n,k,a[11][11],ci,q,w;
    char h;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    scanf("%d",&ci);
    for(int p=0;p<ci;p++){
        scanf("\n%c%d%d",&h,&q,&w);
        if(h=='r'){
            for(int i=0;i<m;i++){
                int t=a[w-1][i];
                a[w-1][i]=a[q-1][i];
                a[q-1][i]=t;
            }
        }
        if(h=='c'){
            for(int i=0;i<n;i++){
                int t=a[i][w-1];
                a[i][w-1]=a[i][q-1];
                a[i][q-1]=t;
            }
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2024-01-15 18:17:46 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int x = 0;
    int y = 0;
    int num = 0;
    scanf("%d%d", &x, &y);
    int arr[100] = { 0 };
    for (int i = 0; i < x * y; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &num);
    char arr1[100] = { '0' };
    int a = num * 3;
    for (int i = 0; i < a; i++)
    {
        getchar();
        scanf("%c", &arr1[i]);
    }
    int i = 0;
    while (num>0)
    {
        if (arr1[i]=='r')
        {
            int han = arr1[i+1]-48;
            int han1 = arr1[i+2]-48;
            int q =(han-1)*y;
            int p = (han1-1)*y;
            for (int c =0;c<y;c++)
            {
                int tmp = arr[p];
                arr[p] = arr[q];
                arr[q] = tmp;
                q++;
                p++;
            }
            num--;
            i += 3;
        }
        if (arr1[i] == 'c')
        {
            int lei = arr1[i+1] - 48;
            int lei1 = arr1[i+2] - 48;
            int q = lei-1;
            int p = lei1-1;
            for (int c = 0; c < x; c++)
            {
                int tmp = arr[p];
                arr[p] = arr[q];
                arr[q] = tmp;
                q+=y;
                p+=y;
            }
            num--;
            i += 3;
        }
        if (arr1[i] != 'r' && arr1[i] != 'c')
        {
            num--;
        }
    }
    int l = x * y;
    i = 0;
    while (l)
    {
        printf("%d ", arr[i]);
        if (l % y-1 == 0)
        {
            printf("\n");
        }
        l--;
        i++;
    }
    return 0;
}
发表于 2023-12-20 12:55:29 回复(1)
#include<stdio.h>
int main() {
    int arr[10][10] = { 0 }, n, m;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);

    int i,k,a,b;
    char t = 0;
    scanf("%d", &k);
    do {
        getchar();
        scanf("%c %d %d", &t, &a, &b);
        int tmp = 0;
        a -= 1, b -= 1;
        if (t == 'r') {
            //行变换
            for (int j = 0; j < m; j++) 
            {
                tmp = arr[a][j];
                arr[a][j] = arr[b][j];
                arr[b][j] = tmp;
            }
        } else if (t == 'c') 
        {
            //列变换
            for (int i = 0; i < n; i++) 
            {
                tmp = arr[i][a];
                arr[i][a] = arr[i][b];
                arr[i][b] = tmp;
            }
        }
    } while (--k);
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < m; j++)
            printf("%d ", arr[i][j]);
        printf("\n");
    }
    return 0;
}

编辑于 2023-12-17 09:40:17 回复(0)
#include <stdio.h>

int main()
{
    int n,m,a,b,k;
    char t = '0'; 
    int arr[1000][1000];
    int num = 0;
    //思路当k满足条件也就是次数时,进行判断r是要行跟行换还是列跟列换,a和b代表要互换的行列
    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);

    while(k--)
    {
        //判断是否要进行交换
        getchar(); // 清除换行符
        scanf("%c %d %d",&t,&a,&b);
        if(t == 'r')
        {
            for(int i = 0;i<m;i++)
            {
                num = arr[a-1][i];
                arr[a-1][i]=arr[b-1][i];
                arr[b-1][i]=num;
            }
        }
        else if(t == 'c')
        {
            for(int i = 0;i<n;i++)
            {
                num = arr[i][a-1];
                arr[i][a-1]=arr[i][b-1];
                arr[i][b-1]=num;
            }
        }
    }
    //打印
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2023-12-01 23:08:02 回复(0)
#include <stdio.h>
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int arr[n][m];
    int i;
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<m;j++)
        {
            scanf("%d ",arr[i]+j);
        }
    }
    int k,a,b;
    char t;
    scanf("%d ",&k);
    while(k--)
    {
        scanf("%c %d %d",&t,&a,&b);
        getchar();//输入字符的时候注意,要先把/0吸走
        a--;
        b--;
        if(t == 'r')
        {
            int j;
            int tmp;
            for(j=0;j<m;j++)
            {
                tmp = arr[a][j];
                arr[a][j] = arr[b][j];
                arr[b][j] = tmp;
            }
        }
        else if(t == 'c')
        {
            int j;
            int tmp;
            for(j=0;j<n;j++)
            {
                tmp = arr[j][a];
                arr[j][a] = arr[j][b];
                arr[j][b] = tmp;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<m;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

发表于 2023-11-12 10:52:55 回复(1)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int arr[n][m];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    int k = 0;
    scanf("%d ", &k);

    char t;
    int a, b;
    for (int i = 0; i < k; i++) {//表示要操作多少行

        scanf(" %c %d %d",&t,&a,&b);//这里注意要在%c前加一个空格

        if (t == 'r') { // 交换行
            int tmp=0;
            for (int c = 0; c < m; c++) {
                tmp = arr[a-1][c];
                arr[a-1][c] = arr[b-1][c];
                arr[b-1][c] = tmp;
            }//记得要将,a,b的值-1来表示下标
        } else if (t == 'c') { // 交换列
            int tmp=0;
            for (int c = 0; c < n; c++) {
                tmp = arr[c][a-1];
                arr[c][a-1] = arr[c][b-1];
                arr[c][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;
}
发表于 2023-04-14 00:45:48 回复(0)
#include <stdio.h>
void swap(int* x,int* y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}
int main()
{
    int n = 0,m = 0,a = 0,b = 0;
    int arr[12][12] = {0};
    scanf("%d%d",&n,&m);
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    int k = 0;
    char op[2] = "0";
    scanf("%d",&k);
    //getchar();
    while(k--)
    {
        scanf("%s %d %d",op,&a,&b);//%s不取空白字符
        //getchar();
        if(op[0]=='r')
        {
            for(int k = 1;k<=m;k++)
            {
                swap(&arr[a][k],&arr[b][k]);
            }
        }
        else if(op[0]=='c')
        {
            for(int k = 1;k<=n;k++)
            {
                swap(&arr[k][a],&arr[k][b]);
            }
        }
        
    }
    for(int i = 1;i<=n;i++)
        {
            for(int j = 1;j<=m;j++)
            {
                printf("%d ",arr[i][j]);
            }
            puts("");
        }
    return 0;
}

发表于 2023-03-24 10:21:07 回复(0)
#include <stdio.h>
void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    int arr[a][b];
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    int t;
    scanf("%d\n", &t);
    while (t--) {
        char c;
        int m, n;
        scanf("%c%d%d\n", &c, &m, &n);
        if (c == 'r') {
            for (int i = 0; i < b; i++) {
                swap(&arr[m - 1][i], &arr[n - 1][i]);
            }
        }
        if (c == 'c') {
            for (int i = 0; i < a; i++) {
                swap(&arr[i][m - 1], &arr[i][n - 1]);
            }
        }
    }
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }


    return 0;
}

发表于 2023-03-22 16:58:18 回复(0)
#include <stdio.h>
int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d", &m, &n);
    int arr[10][10] = { 0 };
    int i = 0;
    for (i = 0; i < m; i++)
    {
        int j = 0;
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }

    int k = 0;
    scanf("%d", &k);
    char ch = 0;
    int a = 0;
    int b = 0;
    while (k)
    {
        getchar(); //前面输入时,缓冲区里还有’\n‘
        //%c 前面加上空格,将跳过第一个输入字符前的空白字符
        scanf("%c %d %d", &ch, &a, &b); //可以在%c 前面加上(空格或者\n)
        if (ch == 'r')
        {
            for (i = 0; i < n; i++)
            {
                //需要注意行和列的关系,谁是不变的,谁是变化的
                int tmp = arr[a - 1][i];
                arr[a - 1][i] = arr[b - 1][i];
                arr[b - 1][i] = tmp;
            }
        }
        else if (ch == 'c')
        {
            for (i = 0; i < m; i++)
            {
                int tmp = arr[i][a - 1];
                arr[i][a - 1] = arr[i][b - 1];
                arr[i][b - 1] = tmp;
            }
        }
        k--;
    }

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

    return 0;
}

发表于 2022-12-18 23:01:17 回复(0)
#include 
int main(void) {
    int n = 0, m = 0;
    int k = 0;
    int a = 0, b = 0;
    char t = 0;
    int s[10][10] = {0};
    int i = 0, j = 0;
    scanf("%d %d", &n, &m); //表示n行m列。
//键入二维矩阵。
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%d", &s[i][j]);
        }
    }
    scanf("%d", &k);
//行列变换。
    for (j = 0; j < k; j++) {
        scanf("%c %d %d", &t, &a, &b);
        if (t == 'r') {
            for (i = 0; i < m; i++) {
                int temp = s[a - 1][i];
                s[a - 1][i] = s[b - 1][i];
                s[b - 1][i] = temp;
            }
        } else if (t == 'c') {
            for (i = 0; i < n; i++) {
                int temp = s[i][a - 1];
                s[i][a - 1] = s[i][b - 1];
                s[i][b - 1] = temp;
            }
        }
    }
    for ( i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d ", s[i][j]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2022-09-22 23:21:16 回复(3)
#include <stdio.h>
int main(){
    int n, m, count, a, b, temp;
    char ch;
    int arr[10][10] = {0};
    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",&count);
    while(count){
        //读掉'\n'
        getchar();
        ch = getchar();
        scanf("%d%d",&a,&b);
        if(ch == 'r'){
            //a从1开始,但数组下标从0开始
            for(int i = 0; i < m; i++){
                temp = arr[a-1][i];
                arr[a-1][i] = arr[b-1][i];
                arr[b-1][i] = temp;
            }
        } else if(ch == 'c'){
            for(int i = 0; i < n; i++){
                temp = arr[i][a-1];
                arr[i][a-1] = arr[i][b-1];
                arr[i][b-1] = temp;
            }
        } 
        count--;
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2022-08-22 14:44:00 回复(0)
#include<stdio.h>
int main() {
    int arr[10][10] = { 0 }, n, m;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);
    int i = 0, k = 0, a = 0, b = 0;
    char input = 0;
    scanf("%d", &k);
    do {
        getchar();
        scanf("%c %d %d", &input, &a, &b);
        int tmp = 0;
        a -= 1, b -= 1;
        if (input == 'r') {
            //行变换
            for (int j = 0; j < m; j++) {
                tmp = arr[a][j];
                arr[a][j] = arr[b][j];
                arr[b][j] = tmp;
            }
        } else if (input == 'c') {
            //列变换
            for (int j = 0; j < n; j++) {
                tmp = arr[j][a];
                arr[j][a] = arr[j][b];
                arr[j][b] = tmp;
            }
        }
    } while (--k);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            printf("%d ", arr[i][j]);
        printf("\n");
    }
    return 0;
}

发表于 2022-08-06 16:02:20 回复(0)
#include <stdio.h>
int main(){
    int n, m, s, a, b, d;
    char t;
    scanf("%d %d", &n, &m);
    int array[n][m];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            scanf("%d", &array[i][j]);
    }
    scanf("%d", &s);
    while(s--){
        getchar();//吸收换行符
        scanf("%c %d %d", &t, &a, &b);
        if(t == 'r'){
            for(int j = 0; j < m; j++){
                d = array[a-1][j];
                array[a-1][j] = array[b-1][j];
                array[b-1][j] = d;
            }
        }
        else if(t == 'c'){
             for(int i = 0; i < n; i++){
                 d = array[i][a-1];
                 array[i][a-1] = array[i][b-1];
                 array[i][b-1] = d;
             }
        }
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            printf("%d ", array[i][j]);
        printf("\n");
    }
    return 0;
}

发表于 2022-07-27 10:41:38 回复(0)