题解 | #矩阵交换#
矩阵交换
https://www.nowcoder.com/practice/ec44d4ff8c794b2f9205bdddbde96817
#include <stdio.h> # int main() { int n, m; char t; int a, b, k; int arr[10][10]; scanf("%d %d", &n, &m); //输入数据储存到二维数组 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } scanf("%d", &k);//按题目要求k行 for (int i = 0; i < k; i++) { scanf(" %c %d %d", &t, &a, &b); //这里要注意当输入完k后要输入换行符就是回车 前面要加个空格否则换行符会被读入t a和b表示要交换的行或者列 -1则表示对应的二维数组的行或列 这里我用for循环当k不等于1 就代表可能多次转换 每次进入循环如果t是r就换行 t是c换列 别的不用管 if条件语句清晰明了。 int t1 = a - 1, t2 = b - 1; //这里我们发现每一次的交换总是两行或者两列之间交换,所以如果换行的话就让列从0~n-1列变换,每次交换元素的时候行是固定的就是t1和t2交换 对于列来说也是每次交换列的时候行是固定的也是t1与t2交换 if (t == 'r') { for (int i = 0; i < n; i++) { int temp = arr[t1][i]; arr[t1][i] = arr[t2][i]; arr[t2][i] = temp; } } if (t == 'c') { for (int j = 0; j < n; j++) { int temp = arr[j][t1]; arr[j][t1] = arr[j][t2]; arr[j][t2] = temp; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }