题解 | #矩阵交换#
矩阵交换
http://www.nowcoder.com/practice/ec44d4ff8c794b2f9205bdddbde96817
#include<stdio.h>
#include<malloc.h>
void swap(int *a,int *b)//设置一个交换的函数
{
int temp=*a;
*a=*b;
*b=temp;
}
int main(void)
{
int n,m;
int k;
scanf("%d %d",&n,&m);
int **num=(int **)malloc(sizeof(int *)*n);
for(int i=0;i<n;i++)
num[i]=(int *)malloc(sizeof(int)*m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&num[i][j]);
scanf("%d",&k);
char *os=(char *)malloc(sizeof(char)*k);
int **hos=(int **)malloc(sizeof(int *)*k);
for(int i=0;i<k;i++)
hos[i]=(int *)malloc(sizeof(int)*2);
for(int i=0;i<k;i++)//注意要输入字符时,如果直接接收,很有可能接收前面输入的回车换行,所以用getchar()吸收掉
{
getchar();
scanf("%c %d %d",&os[i],&hos[i][0],&hos[i][1]);
}
for(int i=0;i<k;i++)
{
switch(os[i])
{
case 'r':
{
for(int j=0;j<m;j++)//如果是r,则进行行交换,
swap(&num[hos[i][0]-1][j],&num[hos[i][1]-1][j]);
break;
}
case 'c':
{
for(int j=0;j<n;j++)//如果是c,则进行列交换
swap(&num[j][hos[i][0]-1],&num[j][hos[i][1]-1]);
break;
}
default:
break;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d ",num[i][j]);
printf("\n");
}
return 0;
}