58 矩阵转换
作者: ZhouMingLiang 时间限制: 1S章节: 二维数组
问题描述 :
明明是一个很聪明的孩子,学什么东西都很快。但是他也有个缺点,就是不愿意做重复的劳动,往往学会一样东西以后,就不太愿意再去碰它。有一天,明明在数学课上学了矩阵的转换,即有一个r×r的矩阵,把矩阵中的数以左上到右下的对角线的方式进行交换,然后形成一个新的矩阵。
例如:有个3×3的矩阵如下:
1 2 3
4 5 6
7 8 9
通过以左上到右下的对角线交换后,形成了一个新的矩阵:
1 4 7
2 5 8
3 6 9
明明很快就学会了,然后自己动手做了几个类似的转换。但是,课后老师布置了很多矩阵转换的作业,让同学回家练习,这就使明明很厌烦了,觉得自己已经学会了,就没有再练习的必要了。于是明明就请你帮个忙,帮他写一个程序,来计算矩阵的交换,帮他完成老师布置的作业。
明明的问题可以归结为:有一个r×r的矩阵,把矩阵中的数以左上到右下的对角线的方式进行转换,然后输出转换后的矩阵。
输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据有多行,每组测试数据的第一行有一个整数r(1≤r≤10),表示一个r×r的矩阵,接下来有r行,每行有r个整数,表示要转换的矩阵中的数,每个数用一个空格隔开。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个转换后的矩阵。每组运算结果形成r行数据,每一行的数字之间以一个空格分隔,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果后面没有空行。 注:通常,显示屏为标准输出设备。
输入范例 :
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2
1 3
2 4
输出范例 :
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
1 2
3 4
算法思想
就是矩阵的转转置,用不到什么算法
代码
#include<stdio.h>
int main()
{
int n;
int i,j;
while(~scanf("%d",&n))
{
int a[10][10];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(j<n-1)
printf("%d ",a[j][i]);
else
printf("%d\n",a[j][i]);
}
printf("\n");
}
return 0;
}