🚩矩阵的行/列互换
- ⛄一) 题目要求
- ⛄二) 题解
- step1:输入矩阵
- step2:输入k(执行 行/列 互换操作的次数)
- step3:(循环内部)行/列互换
- step4:打印互换后的矩阵
- ⛄三) 最终的实现
⛄一) 题目要求
输入描述:
第一行包含两个整数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列,为矩阵交换后的结果。每个数后面有一个空格。
⛄二) 题解
step1:输入矩阵
int n, m;
scanf("%d%d", &n, &m);
//输入矩阵
int arr[10][10];
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
step2:输入k(执行 行/列 互换操作的次数)
⭐注意scanf(“%d”, &k); 后面要有getchar();来读取“换行”(\n)
因为接下来要输入一个字符,否则输入k以后,后面的“换行”(\n)就会被%c读取了,压根进不去这个for循环
int k = 0;
scanf("%d", &k);
getchar();
char aa;
int tem1, tem2, tem;
for (i = 0; i < k; i++)
{
//互换
}
step3:(循环内部)行/列互换
⭐也要注意加scanf后面加getchar();
{
scanf("%c%d%d", &aa,&tem1, &tem2);
getchar();
if (aa == 'r')
{
int c = 0;
for (c = 0; c < m; c++)
{
tem = arr[tem1 - 1][c];
arr[tem1 - 1][c] = arr[tem2 - 1][c];
arr[tem2 - 1][c] = tem;
}
}
if (aa == 'c')
{
int c = 0;
for (c = 0; c < n; c++)
{
tem = arr[c][tem1 - 1];
arr[c][tem1 - 1] = arr[c][tem2 - 1];
arr[c][tem2 - 1] = tem;
}
}
}
step4:打印互换后的矩阵
⭐注意每打印一行要换行(\n)
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
⛄三) 最终的实现
#include<stdio.h>
int main()
{
//step1:输入矩阵行数和列数
int n, m;
scanf("%d%d", &n, &m);
//输入矩阵
int arr[10][10];
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
// step2:输入k(执行 行/列 互换操作的次数)
int k = 0;
scanf("%d", &k);
getchar();
char aa;
int tem1, tem2, tem;
for (i = 0; i < k; i++)
{
//step3:(循环内部)行/列互换
scanf("%c%d%d", &aa,&tem1, &tem2);
getchar();
if (aa == 'r')
{
int c = 0;
for (c = 0; c < m; c++)
{
tem = arr[tem1 - 1][c];
arr[tem1 - 1][c] = arr[tem2 - 1][c];
arr[tem2 - 1][c] = tem;
}
}
if (aa == 'c')
{
int c = 0;
for (c = 0; c < n; c++)
{
tem = arr[c][tem1 - 1];
arr[c][tem1 - 1] = arr[c][tem2 - 1];
arr[c][tem2 - 1] = tem;
}
}
}
//step4:打印互换后的矩阵
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}