这道题很有价值!!!
#include<iostream>
using namespace std;
int a[1005][1005],b[1005][1005] ;
int main() {
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
cin>>a[i][j];
b[j][i]=a[i][j];
}
}
for(int i=1;i<=m;i++) {
for(int j=1;j<=n;j++) {
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
首先int a[1005][1005]时爆栈,所以编译错误。其次,没有看清题目,题目说的转置和平常的不一样!!!
正确的代码
#include<iostream>
using namespace std;
int a[1005][1005],b[1005][1005] ;
int main() {
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
cin>>a[i][j];
b[m+1-j][i]=a[i][j];//重点!!!
}
}
for(int i=1;i<=m;i++) {
for(int j=1;j<=n;j++) {
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
a的第i行为b的第i列(可以直接观察得出),a的第j列为b的第m+1-j行(写出几组数据就可以看到)
b[1][2]=a[2][3]
b[2][1]=a[1][2]
b[3][2]=a[2][1]