此题有两个易错点(难点):
//1.输入的 行/列 ,对应到数组中,需要 -1 //行交换 —— 行 -1 int tmp = arr[a-1][i]; arr[a-1][i] = arr[b-1][i]; arr[b-1][i] = tmp; //列交换 —— 列 -1 int tmp = arr[i][a-1]; arr[i][a-1] = arr[i][b-1]; arr[i][b-1] = tmp; //2.利用getchar函数,吸收缓冲区里的'\n' //输入操作次数 int k=0; scanf("%d",&k); //输入完 k 后,回车 for(int i=0;i<k;i++) { char ch=0; int a=0; int b=0; //吸收缓冲区中的'\n' //否则这个'\n'会被 ch 接收,导致程序无法正常进行 getchar(); scanf("%c %d %d",&ch,&a,&b); //... //... }
完整代码:
#include <stdio.h> int main() { int n=0; int m=0; 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]); } int k=0; scanf("%d",&k); for(int i=0;i<k;i++) { char ch=0; int a=0; int b=0; getchar(); scanf("%c %d %d",&ch,&a,&b); if (ch == 'r') { for (int i = 0; i < m; 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 (int i = 0; i < n; i++) { int tmp = arr[i][a-1]; arr[i][a-1] = arr[i][b-1]; arr[i][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; }