Problem A: 零起点学算法93——矩阵转置
Description
现要求你把一个矩阵行列转置后输出,注意行数和列数可能不相同的。
Input
多组测试数据,每组测试数据先在一行输入n 和m ,表示这个矩阵的行数和列数(1 < n,m <= 10) 然后是n行m列的一个矩阵
Output
对于每组测试数据输出转置后的矩阵
Sample Input
3 2
1 2
3 4
5 6
Sample Output
1 3 5
2 4 6
利用两个数组,完成数组转置
#include <stdio.h>
int main()
{
int m,n;
int i,j;
while (scanf("%d %d",&m,&n) != EOF)
{
int a[m][n],b[n][m];
//输入数据,初始化数组a
for (i = 0;i < m;i++)
{
for (j = 0;j < n;j++)
{
scanf("%d",&a[i][j]);
}
}
//转置数组的元素存入数组b中
for (i = 0;i < m;i++)
{
for (j = 0;j < n;j++)
{
b[j][i] = a[i][j];
}
}
//输出b中数组,注意输出格式,行尾无空格
for (i = 0;i < n;i++)
{
for (j = 0;j < m-1;j++)
printf("%d ",b[i][j]);
printf("%d\n",b[i][m-1]);
}
}
return 0;
}
缩减后
一个数组完成数组转置,在数据输入时
#include <stdio.h>
int main()
{
int m,n;
int i,j;
while (scanf("%d %d",&m,&n) != EOF)
{
//输入数据,完成转置
int a[n][m];
for (i = 0;i < m;i++)
{
for (j = 0;j < n;j++)
{
scanf("%d",&a[j][i]);
}
}
//输出数据,打印时注意格式
for (i = 0;i < n;i++)
{
for (j = 0;j < m-1;j++)
printf("%d ",a[i][j]);
printf("%d\n",a[i][m-1]);
}
}
return 0;
}