KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。
KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。提示:当t为别的字符时不需要处理接下来一行输入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)。
输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。
2 2 1 2 3 4 1 r 1 2
3 4 1 2
2 2 1 3 6 8 2 c 1 2 t 1 2
3 1 8 6
当t为别的字符时不需要处理,所以只交换了原矩阵的第1列和第2列。
#include <stdio.h> int main() { int n = 0, m = 0; scanf("%d%d", &n, &m); int arr[10][10] = { 0 }; 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); char a; int b = 0, c = 0; for(int i = 0; i < k; i++) { scanf(" %c%d%d", &a, &b, &c); while(a == 'c' || a == 'r') { if (a == 'r') { for (int j = 0; j < m; j++) { int tmp = arr[b-1][j]; arr[b-1][j] = arr[c-1][j]; arr[c-1][j] = tmp; } } else if (a == 'c') { for (int i = 0; i < n; i++) { int tmp = arr[i][b-1]; arr[i][b-1] = arr[i][c-1]; arr[i][c-1] = tmp; } } break; } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { printf("%d ", arr[i][j]); } printf("\n"); } }
#include<stdio.h> int main() { int n, m; scanf("%d %d", &n, &m); int arr[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } int k; scanf("%d", &k); for (int num = 0; num < k; num++) { char c; int x, y; scanf(" %c %d %d", &c, &x, &y);// 注意空格,忽略前面的换行符 if (c == 'r') { for (int i = 0; i < m; i++) { int tmp = arr[x - 1][i]; arr[x - 1][i] = arr[y - 1][i]; arr[y - 1][i] = tmp; } } else if (c == 'c') { for (int i = 0; i < n; i++) { int tmp = arr[i][x - 1]; arr[i][x - 1] = arr[i][y - 1]; arr[i][y - 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; }
#include <stdio.h> int main() { int a, b; int arr[10][10]={10}; scanf("%d%d",&a,&b); for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { scanf("%d",&arr[i][j]); } } int m=0; char c1=0; int c,d; scanf("%d", &m); for (int i=0; i<m; i++) { scanf(" %c %d %d", &c1, &c, &d); if (c1=='r') { for (int j=0;i<b ; i++) { int tmp=arr[c-1][i]; arr[c-1][i]=arr[d-1][i]; arr[d-1][i]=tmp; } } else if (c1=='c') { for (int j=0; j<a; j++) { int tmp=arr[j][c-1]; arr[j][c-1]=arr[j][d-1]; arr[j][d-1]=tmp; } } } for(int i=0 ;i<a ;i++) { for(int j=0 ;j<b ;j++){ printf("%d ",arr[i][j]); } printf("\n"); } return 0; }为啥总是有一些过不去
#include <stdio.h> #include <malloc.h> int main() { //矩阵的行与列 int n = 0; int m = 0; //指向矩阵的指针 int* p = NULL; //控制循环的变量 int i = 0; int j = 0; int z = 0; //第3次输入的指令 int k = 0; char t = 0; int a = 0; int b = 0; int tem = 0; scanf("%d%d", &n, &m); //开辟空间 p = (int*)malloc(sizeof(int) * n * m); if (!p) { perror("malloc:p"); return 1; } //录入矩阵 for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", p + (i * m) + j); } } scanf("%d", &k); for (z = 0; z < k; z++) { scanf(" %c%d%d", &t, &a, &b); a -= 1; b -= 1; //换行 if (t == 'r') { for (j = 0; j < m; j++) { tem = *(p + (a * m) + j); *(p + (a * m) + j) = *(p + (b * m) + j); *(p + (b * m) + j) = tem; } } //换列 else if (t == 'c') { for (i = 0; i < m; i++) { tem = *(p + (i * m) + a); *(p + (i * m) + a) = *(p + (i * m) + b); *(p + (i * m) + b) = tem; } } } //输出结果 for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("%d ", *(p + (i * m) + j)); } printf("\n"); } //释放内存 free(p); p = NULL; return 0; }
#include <stdio.h> int main() { int n,m; scanf("%d %d",&n,&m); int i,j; int arr[n][m]; for(i=0;i<n;i++) { for(j=0;j<m;j++) scanf("%d",&arr[i][j]); } int k,temp; scanf("%d",&k); int a,b;char t; for(i=0;i<k;i++) { scanf(" %c %d %d",&t,&a,&b); a--;b--; //出错点 if(t=='r')//行变换 { for(j=0;j<m;j++) { temp=arr[a][j]; arr[a][j]=arr[b][j]; arr[b][j]=temp; } } if(t=='c')//列变换 { for(j=0;j<n;j++) { temp=arr[j][a]; arr[j][a]=arr[j][b]; arr[j][b]=temp; } } } for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%d ",arr[i][j]); printf("\n"); } return 0; }答题思路是写出来的,但一直出错,最后和答案对比时发现是下标没有对上,在代码中的出错点上
#include <stdio.h> int main() { int n, m; scanf("%d %d", &n, &m); int arr[n][m]; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ scanf("%d", &arr[i][j]); } } char t; int p, q; while(scanf(" %c %d %d", &t, &p, &q) != EOF){ p--; q--; if(t == 'r'){ for(int j=0; j<m; j++){ int temp = arr[p][j]; arr[p][j] = arr[q][j]; arr[q][j] = temp; } } if(t == 'c'){ for(int i=0; i<n; i++){ int temp = arr[i][p]; arr[i][p] = arr[i][q]; arr[i][q] = temp; } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
#include<stdio.h> int main() { int m = 0;//列 int n = 0;//行 int arr[10][10] = { 0 }; int cnt = 0;//操作的次数 char op = 0;//代表操作的字符 int a = 0; int b = 0; //读取数据 scanf("%d%d", &n, &m); int i = 0; int j = 0; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } scanf("%d", &cnt); for (i = 0; i < cnt; i++) { //读取操作指令 //注释解释: //scanf("%d", &a); //scanf(" %c", &c); // 消耗 %d 后的所有后继空白符,然后读一个 char scanf(" %c %d %d", &op, &a, &b); //执行操作 if (op == 'r') { //交换a和b行 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; } } else if (op == 'c') { //交换a和b列 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; } } } //输出 for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int m,n,k,a[11][11],ci,q,w; char h; scanf("%d %d",&n,&m); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf("%d",&a[i][j]); } } scanf("%d",&ci); for(int p=0;p<ci;p++){ scanf("\n%c%d%d",&h,&q,&w); if(h=='r'){ for(int i=0;i<m;i++){ int t=a[w-1][i]; a[w-1][i]=a[q-1][i]; a[q-1][i]=t; } } if(h=='c'){ for(int i=0;i<n;i++){ int t=a[i][w-1]; a[i][w-1]=a[i][q-1]; a[i][q-1]=t; } } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ printf("%d ",a[i][j]); } printf("\n"); } return 0; }
#include<stdio.h> int main() { int arr[10][10] = { 0 }, n, m; 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 i,k,a,b; char t = 0; scanf("%d", &k); do { getchar(); scanf("%c %d %d", &t, &a, &b); int tmp = 0; a -= 1, b -= 1; if (t == 'r') { //行变换 for (int j = 0; j < m; j++) { tmp = arr[a][j]; arr[a][j] = arr[b][j]; arr[b][j] = tmp; } } else if (t == 'c') { //列变换 for (int i = 0; i < n; i++) { tmp = arr[i][a]; arr[i][a] = arr[i][b]; arr[i][b] = tmp; } } } while (--k); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; }
#include <stdio.h> int main() { int n,m,a,b,k; char t = '0'; int arr[1000][1000]; int num = 0; //思路当k满足条件也就是次数时,进行判断r是要行跟行换还是列跟列换,a和b代表要互换的行列 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); while(k--) { //判断是否要进行交换 getchar(); // 清除换行符 scanf("%c %d %d",&t,&a,&b); if(t == 'r') { for(int i = 0;i<m;i++) { num = arr[a-1][i]; arr[a-1][i]=arr[b-1][i]; arr[b-1][i]=num; } } else if(t == 'c') { for(int i = 0;i<n;i++) { num = arr[i][a-1]; arr[i][a-1]=arr[i][b-1]; arr[i][b-1]=num; } } } //打印 for(int i = 0;i<n;i++) { for(int j = 0;j<m;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int n,m; scanf("%d %d",&n,&m); int arr[n][m]; int i; for(i=0;i<n;i++) { int j; for(j=0;j<m;j++) { scanf("%d ",arr[i]+j); } } int k,a,b; char t; scanf("%d ",&k); while(k--) { scanf("%c %d %d",&t,&a,&b); getchar();//输入字符的时候注意,要先把/0吸走 a--; b--; if(t == 'r') { int j; int tmp; for(j=0;j<m;j++) { tmp = arr[a][j]; arr[a][j] = arr[b][j]; arr[b][j] = tmp; } } else if(t == 'c') { int j; int tmp; for(j=0;j<n;j++) { tmp = arr[j][a]; arr[j][a] = arr[j][b]; arr[j][b] = tmp; } } } for(i=0;i<n;i++) { int j; for(j=0;j<m;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> void swap(int* x,int* y) { int tmp = *x; *x = *y; *y = tmp; } int main() { int n = 0,m = 0,a = 0,b = 0; int arr[12][12] = {0}; scanf("%d%d",&n,&m); for(int i = 1;i<=n;i++) { for(int j = 1;j<=m;j++) { scanf("%d",&arr[i][j]); } } int k = 0; char op[2] = "0"; scanf("%d",&k); //getchar(); while(k--) { scanf("%s %d %d",op,&a,&b);//%s不取空白字符 //getchar(); if(op[0]=='r') { for(int k = 1;k<=m;k++) { swap(&arr[a][k],&arr[b][k]); } } else if(op[0]=='c') { for(int k = 1;k<=n;k++) { swap(&arr[k][a],&arr[k][b]); } } } for(int i = 1;i<=n;i++) { for(int j = 1;j<=m;j++) { printf("%d ",arr[i][j]); } puts(""); } return 0; }
#include <stdio.h> void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int a, b; scanf("%d %d", &a, &b); int arr[a][b]; for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { scanf("%d", &arr[i][j]); } } int t; scanf("%d\n", &t); while (t--) { char c; int m, n; scanf("%c%d%d\n", &c, &m, &n); if (c == 'r') { for (int i = 0; i < b; i++) { swap(&arr[m - 1][i], &arr[n - 1][i]); } } if (c == 'c') { for (int i = 0; i < a; i++) { swap(&arr[i][m - 1], &arr[i][n - 1]); } } } for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int m = 0; int n = 0; scanf("%d %d", &m, &n); int arr[10][10] = { 0 }; int i = 0; for (i = 0; i < m; i++) { int j = 0; for (j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } int k = 0; scanf("%d", &k); char ch = 0; int a = 0; int b = 0; while (k) { getchar(); //前面输入时,缓冲区里还有’\n‘ //%c 前面加上空格,将跳过第一个输入字符前的空白字符 scanf("%c %d %d", &ch, &a, &b); //可以在%c 前面加上(空格或者\n) if (ch == 'r') { for (i = 0; i < n; 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 (i = 0; i < m; i++) { int tmp = arr[i][a - 1]; arr[i][a - 1] = arr[i][b - 1]; arr[i][b - 1] = tmp; } } k--; } for (i = 0; i < m; i++) { int j = 0; for (j = 0; j < n; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
#include int main(void) { int n = 0, m = 0; int k = 0; int a = 0, b = 0; char t = 0; int s[10][10] = {0}; int i = 0, j = 0; scanf("%d %d", &n, &m); //表示n行m列。 //键入二维矩阵。 for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &s[i][j]); } } scanf("%d", &k); //行列变换。 for (j = 0; j < k; j++) { scanf("%c %d %d", &t, &a, &b); if (t == 'r') { for (i = 0; i < m; i++) { int temp = s[a - 1][i]; s[a - 1][i] = s[b - 1][i]; s[b - 1][i] = temp; } } else if (t == 'c') { for (i = 0; i < n; i++) { int temp = s[i][a - 1]; s[i][a - 1] = s[i][b - 1]; s[i][b - 1] = temp; } } } for ( i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("%d ", s[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main(){ int n, m, count, a, b, temp; char ch; 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]); } } scanf("%d",&count); while(count){ //读掉'\n' getchar(); ch = getchar(); scanf("%d%d",&a,&b); if(ch == 'r'){ //a从1开始,但数组下标从0开始 for(int i = 0; i < m; i++){ temp = arr[a-1][i]; arr[a-1][i] = arr[b-1][i]; arr[b-1][i] = temp; } } else if(ch == 'c'){ for(int i = 0; i < n; i++){ temp = arr[i][a-1]; arr[i][a-1] = arr[i][b-1]; arr[i][b-1] = temp; } } count--; } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
#include<stdio.h> int main() { int arr[10][10] = { 0 }, n, m; 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 i = 0, k = 0, a = 0, b = 0; char input = 0; scanf("%d", &k); do { getchar(); scanf("%c %d %d", &input, &a, &b); int tmp = 0; a -= 1, b -= 1; if (input == 'r') { //行变换 for (int j = 0; j < m; j++) { tmp = arr[a][j]; arr[a][j] = arr[b][j]; arr[b][j] = tmp; } } else if (input == 'c') { //列变换 for (int j = 0; j < n; j++) { tmp = arr[j][a]; arr[j][a] = arr[j][b]; arr[j][b] = tmp; } } } while (--k); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; }
#include <stdio.h> int main(){ int n, m, s, a, b, d; char t; scanf("%d %d", &n, &m); int array[n][m]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) scanf("%d", &array[i][j]); } scanf("%d", &s); while(s--){ getchar();//吸收换行符 scanf("%c %d %d", &t, &a, &b); if(t == 'r'){ for(int j = 0; j < m; j++){ d = array[a-1][j]; array[a-1][j] = array[b-1][j]; array[b-1][j] = d; } } else if(t == 'c'){ for(int i = 0; i < n; i++){ d = array[i][a-1]; array[i][a-1] = array[i][b-1]; array[i][b-1] = d; } } } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) printf("%d ", array[i][j]); printf("\n"); } return 0; }