首页 > 试题广场 >

矩阵交换

[编程题]矩阵交换
  • 热度指数:25841 时间限制: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 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>
#define ROW 10
#define COL 10

void translation_row(int arr[ROW][COL], int row1, int row2, int col){ 
    for(int j = 0; j < col; j++){ 
        arr[row1][j] = arr[row1][j] ^ arr[row2][j];
        arr[row2][j] = arr[row1][j] ^ arr[row2][j];
        arr[row1][j] = arr[row1][j] ^ arr[row2][j];
    }
}
void translation_col(int arr[ROW][COL], int col1, int col2, int row){
    for(int i = 0; i < row; i++){
        arr[i][col1] = arr[i][col1] ^ arr[i][col2];
        arr[i][col2] = arr[i][col1] ^ arr[i][col2];
        arr[i][col1] = arr[i][col1] ^ arr[i][col2];
    }
}

int main(){
    int n, m, arr[ROW][COL], i, j = 0;
    int count, num1, num2; // 操作次数 操作数1(行or列) 操作数2(行or列)
    char option; 
    scanf("%d %d", &n, &m);
    for(i = 0; i < n * m; i++, j++)
        scanf("%d", &arr[i / m][j % m]);
    scanf("%d", &count);
    while(count > 0){
        getchar();
        scanf("%c %d %d", &option, &num1, &num2);
        switch(option){
            case 'r':
                translation_row(arr, num1-1, num2-1, m); //行变换
                break;
            case 'c':
                translation_col(arr, num1-1, num2-1, n); //列变换
                break;
            default:
                break;
        }
        count--;
    }
    for(i = 0; i < n * m; i++, j++){
        printf("%d ", arr[i / m][j % m]);
        if((j + 1) % m == 0)
            printf("\n");
    }
    return 0;
}

发表于 2022-06-10 23:58:29 回复(0)
#include<stdio.h>
int main(void) {
    int n, m, k;
    char t[5];
    int a[5] = {0};
    int b[5] = {0};
    scanf("%d %d", &n, &m);//输入矩阵的n行m列
    getchar();
    int matrix[10][10];//定义一个空的二维矩阵,用于存放输入数据
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &matrix[i][j]);//输入n行m列数据到矩阵中
        }
        getchar();
    }
    scanf("%d", &k);//执行k次操作
    getchar();
    for (int i = 0; i < k; i++) {
        scanf("%c %d %d", &t[i], &a[i], &b[i]);
        getchar();
        //printf("%c %d %d\n", t[i], a[i], b[i]);
        int tem = 0;
        if ( t[i] == 'r') {
            //printf("r\n");
            for (int x = 0; x < m; x++) {
                /*tem = matrix[b[i]][x];
                matrix[b[i]][x] = matrix[a[i]][x];
                matrix[a[i]][x] = tem;
                */
                matrix[a[i]-1][x] ^= matrix[b[i]-1][x];
                matrix[b[i]-1][x] ^= matrix[a[i]-1][x];
                matrix[a[i]-1][x] ^= matrix[b[i]-1][x];
                
            }
        }
        if ( t[i] == 'c') {
            //printf("c\n");
            for (int y = 0; y < n; y++) {
                tem = matrix[y][b[i]-1];
                matrix[y][b[i]-1] = matrix[y][a[i]-1];
                matrix[y][a[i]-1] = tem;
                /*
                matrix[y][a[i]] ^= matrix[y][b[i]];
                matrix[y][b[i]] ^= matrix[y][a[i]];
                matrix[y][a[i]] ^= matrix[y][b[i]];
                */
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2022-06-05 16:05:00 回复(0)
#include<stdio.h>
int main(){
    int n,m,a[10][10],k,p,q,i,j,s;
    char t;
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%d",&a[i][j]);
    scanf("%d",&k);
    for(s=0;s<k;s++){
        scanf(" %c %d %d",&t,&p,&q);
        if(t=='r')
           for(j=0;j<m;j++){
               a[p-1][j] += a[q-1][j];
               a[q-1][j] = a[p-1][j]-a[q-1][j];
               a[p-1][j] -= a[q-1][j];
           }     
        if(t=='c')
           for(i=0;i<n;i++){
               a[i][p-1] += a[i][q-1];
               a[i][q-1] = a[i][p-1]-a[i][q-1];
               a[i][p-1] -= a[i][q-1];
           }
    }
    for(i=0;i<n;i++){
        for(j=0;j<m;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
}

发表于 2021-06-05 18:34:55 回复(2)
#include<stdio.h>
int main(){
    int n,m,i,j,k,a,b,item;
    int ar[10][10];
    char t;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%d",&ar[i][j]);
    scanf("%d",&k);
    getchar();
    while(k>=1){
        t=getchar();
        scanf("%d%d",&a,&b);
        if (t == 'r') {
            for (j = 0; j < m; j++) {
                item = ar[a-1][j];
                ar[a-1][j] = ar[b-1][j];
                ar[b-1][j] = item;
            }
        }
        if (t == 'c') {
            for (i = 0; i < n; i++) {
                item = ar[i][a-1];
                ar[i][a-1] = ar[i][b-1];
                ar[i][b-1] = item;
            }
        }
        k--;
        getchar();
    }
    for(i=0;i<n;i++){
        for(j=0;j<m;j++)
            printf("%d ",ar[i][j]);
        printf("\n");
    }
    return 0;
}
发表于 2020-05-09 20:18:58 回复(0)
注意字符问题
#include <stdio.h>
int main()
{
    int a[15][15],b[15][15];
    int i,j,n,m,flag=1,k;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    scanf("%d",&k);
    while(k--){
        char ch;
        getchar();
        ch=getchar();
        int x,y;
        scanf("%d%d",&x,&y);
        x--;
        y--;
        if(ch=='r'){
            for(j=0;j<m;j++){
                int t=a[x][j];
                a[x][j]=a[y][j];
                a[y][j]=t;
            }
        }else if(ch=='c'){
            for(i=0;i<n;i++){
                int t=a[i][x];
                a[i][x]=a[i][y];
                a[i][y]=t;
            }
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}

发表于 2020-04-10 19:06:22 回复(1)
#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>
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<bits/stdc++.h>
using namespace std;
int main()
{
    int hang,lie;
    cin>>hang>>lie;
    //矩阵初始化
    int arr[hang][lie],arr_num;
    for(int i = 0;i<hang;i++){
        for(int j = 0;j<lie;j++){
            cin>>arr_num;
            arr[i][j] = arr_num;
            
        }
    }
    int k;
    int a,b;
    char c1 = 'r',c2 = 'c',t;
    cin>>k;
   do{
       cin>>t>>a>>b;
    
       //行置换
        if(t == c1){
            for(int i = 0;i<hang;i++){
                for(int j = 0;j<lie;j++){
                    if(i == (a-1)){
                        int temp = arr[b-1][j];
                        arr[b-1][j] = arr[a-1][j];
                        arr[a-1][j] = temp;
                    }
                }
            }
        }
       //列置换,也要加判断条件,不能只是else
        else if(t == c2){

            for(int i = 0;i<hang;i++){
                for(int j = 0;j<lie;j++){
                    if(j == a -1){
                      int temp = arr[i][b-1];
                      arr[i][b-1] = arr[i][a-1];
                      arr[i][a-1] = temp;
                    }
                }
                    
            }

        }
       //保证多次操作只输入结果一次
       if(k == 1){
           
           for(int i = 0;i<hang;i++){
               for(int j = 0;j<lie;j++){

                 cout<<arr[i][j]<<" ";

               }
               cout<<endl;
                    
           }
           
       }
       
       
       k--;
   }while(k>0);
    
}

发表于 2020-10-02 22:28:50 回复(0)
int main()
{
	int n = 0, m = 0;
	scanf("%d%d", &n, &m);
	int arr[10][10] = { 0 };
	int i = 0, j = 0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);
 		}
	}
	int k = 0;
	scanf("%d", &k);
	int a = 0, b = 0;
	char t=' ';
	//循环k次
	while(k)
	{
		getchar();//将缓冲区内空格或回车清除
		scanf("%c%d%d",&t,&a, &b);
		//行转换
		//每次换行或列,需要相对应的减一
		if (t == 'r')
		{
			for (j = 0; j < m; j++)
			{
				int temp = arr[a-1][j];
				arr[a-1][j] = arr[b-1][j];
				arr[b-1][j] = temp;
			}
		}
		//列转换
		else if (t == 'c')
		{
			for (i = 0; i < n; i++)
			{
				int temp = arr[i][a-1];
				arr[i][a-1] = arr[i][b-1];
				arr[i][b-1] = temp;
			}
		}
		//其它字符直接跳过
		else
		{
			break;
		}
		k--;
	}
	//输出
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

发表于 2024-08-29 21:28:03 回复(0)
int main()
{
	int n, 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, b = 0;
	int tmp = 0;
	while (k)
	{
        //注释解释:
		
		//scanf(" %c", &c); 
        //为什么要加在%c前空格 
        //在scanf语句中的%c前面加一个空格。如果没有加的话在我们输入第一个字符并以空格结束输入后,该字符与’\n’会一起进入标准流输入,’\n’便会作为第二个scanf语句的内容输入,从而让你的程序出现问题。

		scanf(" %c %d %d", &t, &a, &b);
        //或
        //按照输入读入,注意r c 读入时有个空格,然后要用getchar吃掉空格,然后正常读入
        //t = getchar();
		//scanf("%d %d", &a, &b);
		if (t=='r')
		{
			int j = 0;
			for (j=0;j<m;j++)
			{
				tmp = arr[a - 1][j];
				arr[a - 1][j] = arr[b-1][j];
				arr[b - 1][j] = tmp;
			}
		}
		else if(t=='c')
		{
			for (i = 0; i < n; i++)
			{
				tmp = arr[i][a - 1];
				arr[i][a-1] = arr[i][b-1];
				arr[i][b - 1] = tmp;
			}
		}

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

	return 0;
}



发表于 2024-07-27 18:05:08 回复(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 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)
m,n = map(int,input().split())
x = list(input().split() for _ in range(m))
k = int(input())
for _ in range(k):
    t,a,b = input().split()
    if t == 'r':
        i = x[int(a)-1]
        x[int(a)-1] = x[int(b)-1]
        x[int(b)-1] = i
    elif t == 'c':
        for i in range(m):
            p = x[i][int(a)-1]
            x[i][int(a)-1] = x[i][int(b)-1]
            x[i][int(b)-1] = p
for i in x:
    print(*i)

发表于 2021-08-31 09:26:56 回复(1)
#include<stdio.h>
int main(){
    int n,m,i,j,a,b,c,temp;
    char op;
    scanf("%d %d",&n,&m);
    int A[n][m];
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&A[i][j]);
        }
    }
    scanf("%d",&c);
    for(i=0;i<c;i++){
        getchar();                    //这里加getchar吸收空格吗?
        scanf("%c %d %d",&op,&a,&b);
                                  //那为什么这里不加getchar
        if(op=='r'){
            for(j=0;j<m;j++){
                temp=A[a-1][j];
                A[a-1][j]=A[b-1][j];
                A[b-1][j]=temp;
            }
        }
        else if(op=='c'){
            for(i=0;i<n;i++){
                temp=A[i][a-1];
                A[i][a-1]=A[i][b-1];
                A[i][b-1]=temp;
            }
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",A[i][j]);
        }
        printf("\n");
    }
    return 0;
}
铁汁,这段代码只能通过50%的用例,错在哪里了,谢谢大佬指点,还有备注里面也有一个小疑点。谢谢大佬!!
发表于 2020-03-16 11:40:13 回复(6)
#include <iostream>
using namespace std;

int main() {
    int a,b;
    cin>>a>>b;
    int arr[10][10] = {0};
    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++){
            cin>>arr[i][j];
        }
    }
    int n;
    cin>>n;
    char c;
    int q,w;
    for(int y=0;y<n;y++){
        cin>>c>>q>>w;
        if(c=='r'){//交换用临时保存 循环一次就可以   找到规律
           for(int i=0;i<b;i++){
            int temp = arr[q-1][i];
            arr[q-1][i] = arr[w-1][i];
            arr[w-1][i] = temp;
           }
           continue;
        }
        else if(c=='c'){
            for(int i=0;i<a;i++){
                int temp = arr[i][q-1];
                arr[i][q-1] = arr[i][w-1];
                arr[i][w-1] = temp;
            }
            continue;
        }
        else{
            continue;
        }
    }
    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++){
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
   
}
刚开始的时候 思路是再创建一个数组 把第一个数组通过交换给第二个数组 但是无法循环交换第二行(列) 一直卡在这  后面看到题解 才想到用临时存储来交换 这样就不用考虑奇数行 中间行未交换的情况了
发表于 2024-11-21 15:15:11 回复(0)
#include<stdio.h>
typedef struct Node1 {
    char oper;
    int a;
    int b;
} oper;
oper s[10];
void swap(int* a, int* b) {
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
void func(int* p[], char t, int a, int b, int n, int m) {
    if (t == 'r') {
        for (int i = 0; i < m; i++)
            swap(*(p + a) + i, *(p + b) + i);
    } else if (t == 'c') {
        for (int i = 0; i < n; i++)
            swap(*(p + i) + a, *(p + i) + b);
    } else
        return;
}
int main() {
    int n, m, k, a, b;
    char t;
    scanf("%d%d", &n, &m);

    int A[10][10];
    char oper[10];
    int* p[10];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d", &A[i][j]);
    scanf("%d", &k);
    getchar();
    for (int i = 0; i < k; i++) {
        scanf("%c%d%d", &s[i].oper, &s[i].a, &s[i].b);
        getchar();
    }
    for (int i = 0; i < n; i++)
        p[i] = &A[i][0];

    for (int i = 0; i < k; i++)
        func(p, s[i].oper, s[i].a - 1, s[i].b - 1, n, m);

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            printf("%d ", A[i][j]);
        printf("\n");
    }
}
发表于 2024-11-03 20:01:39 回复(0)
#include<stdio.h>
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int i,j,array[n][m];
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    int k;
    scanf("%d",&k);
    while(k--)
    {
        getchar();
        char ch;
        ch=getchar();
        int a,b,temp=0;
        scanf("%d %d",&a,&b);
        if(ch=='r')
        {
          for(j=0;j<m;j++)
          {
            temp=array[a-1][j];
            array[a-1][j]=array[b-1][j];
            array[b-1][j]=temp;
          }
        }
        if(ch=='c')
        {
            for(i=0;i<n;i++)
            {
                temp=array[i][a-1];
                array[i][a-1]=array[i][b-1];
                array[i][b-1]=temp;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
   
    return 0;
}

发表于 2024-10-03 12:18:41 回复(0)
row,col = map(int,input().split())
arr = list(input().split() for _ in range(row))
k = int(input())
for _ in range(k):
    r,n,m = input().split()
    n = int(n)-1
    m = int(m)-1
    if r=="r":
        arr[n],arr[m] = arr[m],arr[n]
    elif r=="c":
        for i in range(row):
            arr[i][n],arr[i][m] = arr[i][m],arr[i][n]
    else:
        pass
for i in arr:
    print(*i)

发表于 2024-09-29 18:36:50 回复(0)