输入
输入包含m + 1行:
第一行是整数m和n,两项之间用一个空格隔开(0 < m, n <= 10)。
第二行到第m + 1行每行均有n个整数,相邻两项之间用一个空格隔开。
输出
输出包含n行,是转置后的矩阵。每行均有m个整数,相邻两项之间用一个空格隔开。
输入示例
3 2
1 2
4 5
7 8
输出示例
1 4 7
2 5 8
数据范围
输入输出均为int范围的整数
本文介绍两种方法:
第一种:
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[10][10];
int at[10][10];
int m,n,i,j;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
at[j][i]=a[i][j];
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d ",at[i][j]);
}
printf("\n");
}
return 0;
}
第二种:使用指针
#include <stdio.h>
#include <stdlib.h>
int main() {
int *a[10];
int *at[10];
int m,n,i,j;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",a+(n*i)+j);
}
}
Transpose(a,at,m,n);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d ",*(at+(m*i)+j));
}
printf("\n");
}
return 0;
}
void Transpose(int *a[], int *at[], int m, int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
*(at+(m*i)+j)=*(a+(n*j)+i);
}
}
}