C语言矩阵交换行列

介绍一个关于矩阵交换行列的小问题

那么我们来看问题吧。

输入描述:
第一行包含两个整数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列,为矩阵交换后的结果。每个数后面有一个空格。
####很显然这个问题的关键就是如何实现行列的交换。那么下面我们来看一下如何交换行列,实际上很简单,就是类似于交换了两个变量。

#include<stdio.h>

int main()
{
    int n,m,i,j,k;
    int num1,num2;//要交换的两行或两列
    char ch;//决定进行行变换还是列变换
    int rek;//进行几次操作
    int tmp;
    scanf("%d %d",&n,&m);
    int arr[n][m];
    //输入矩阵
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    
    scanf("%d",&k);
    
    for(rek=0;rek<k;rek++)
    {
       scanf(" %c %d %d",&ch,&num1,&num2); 
        if(ch=='r')//进行行变换
        {
            for(j=0;j<m;j++)
            {
                tmp=arr[num1-1][j];//进行行变换的时候约定矩阵的行不变循环递归列然后交换即可
                arr[num1-1][j]=arr[num2-1][j];
                arr[num2-1][j]=tmp;
            }
        }
        else if(ch=='c')//进行列变换
        {
            for(i=0;i<n;i++)
            {
                tmp=arr[i][num1-1];//同理进行列变换的时候约定列为需要交换的两列不变后,循环递归循环行即可。
                arr[i][num1-1]=arr[i][num2-1];
                arr[i][num2-1]=tmp;
            }
        }

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

    
    return 0;
}

简单说一下交换逻辑就是,交换两行,锁定行标不变循环列标交换元素。交换两列就相反就可以了。

当然如果有更简单的方法也欢迎来和我交流这只是方法之一。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以回答你的问题。 1. C语言矩阵中的最小元素:可以使用双重循环遍历矩阵,记录最小值,代码如下: ```c int min = matrix[0][0]; for(int i=0; i<row; i++){ for(int j=0; j<col; j++){ if(matrix[i][j] < min){ min = matrix[i][j]; } } } ``` 2. 矩阵交换:可以使用一个临时数组来保存一的数据,然后进行交换,代码如下: ```c int temp[col]; for(int j=0; j<col; j++){ temp[j] = matrix[row1][j]; matrix[row1][j] = matrix[row2][j]; matrix[row2][j] = temp[j]; } ``` 3. 图像相似度:可以使用像素值的平均差或者均方误差来计算图像相似度,代码如下: ```c // 计算像素值的平均差 int sum = 0; for(int i=0; i<height; i++){ for(int j=0; j<width; j++){ sum += abs(image1[i][j] - image2[i][j]); } } double similarity = (double)sum / (height * width); // 计算像素值的均方误差 double mse = 0.0; for(int i=0; i<height; i++){ for(int j=0; j<width; j++){ mse += pow(image1[i][j] - image2[i][j], 2); } } mse /= (height * width); double similarity = 1.0 / (1.0 + mse); ``` 4. 矩阵加法:可以使用双重循环遍历矩阵,逐个相加,代码如下: ```c int result[row][col]; for(int i=0; i<row; i++){ for(int j=0; j<col; j++){ result[i][j] = matrix1[i][j] + matrix2[i][j]; } } ``` 5. 矩阵转置:可以使用双重循环遍历矩阵,将行列互换,代码如下: ```c int result[col][row]; for(int i=0; i<row; i++){ for(int j=0; j<col; j++){ result[j][i] = matrix[i][j]; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KissKernel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值