描述
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列,为矩阵交换后的结果。每个数后面有一个空格。
思路:当输入一行操作时,处理一行。
易错点:读入操作时,因为第一个读入的是字符c%,所以需要消耗%d后的所有后继空白符,然后读一个char,因此,scanf(" %c %d %d",&t,&a,&b)中c%前需要加一个空格或者每次加上getchar(麻烦)。
#include <stdio.h>int main()
{int n=0;int m=0;scanf("%d %d",&n,&m);int i=0;int j=0;int arr[10][10]={0};for(i=0;i<n;i++){for(j=0;j<m;j++){scanf("%d",&arr[i][j]);}}int k=0;scanf("%d",&k);char t=0;int a=0;int b=0;for(i=0;i<k;i++){//对于每一行 //只有读入第一个字符是c%时才需要考虑scanf(" %c %d %d",&t,&a,&b);//消耗%d后的所有后继空白符,然后读一个charif(t == 'c')//交换列{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;}}else if(t == 'r')//交换行{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;}}}//打印for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%d ",arr[i][j]);}printf("\n");}return 0;
}