求转置矩阵问题
-
描述
-
求一个三行三列的转置矩阵。
-
输入
-
第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组测试数据是九个整型数(每个数都不大于10000),分别为矩阵的的每项;
输出 -
每组测试数据的转置矩阵;
请在每组输出之后加一个换行
样例输入 -
2 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1
样例输出
1 4 7 2 5 8 3 6 9 2 5 8 3 6 9 4 7 1
已经提交通过的:#include<stdio.h> int main() { int n,i,j,k; int a[3][3]; int exchange(int a[3][3]); scanf("%d",&n); for( k=0;k<n;k++) { for( i=0;i<3;i++) for( j=0;j<3;j++) scanf("%d",&a[i][j]); exchange(a); } return 0; } int exchange(int a[3][3]) { int b[3][3]; printf("%d %d %d\n%d %d %d\n%d %d %d\n",a[0][0],a[1][0],a[2][0],a[0][1],a[1][1],a[2][1],a[0][2],a[1][2],a[2][2]); return 0; }
未提交通过的:#include<stdio.h> int main() { int n,i,j,k; int a[3][3]; int exchange(int a[3][3]); scanf("%d",&n); for( k=0;k<n;i++) { for( i=0;i<3;i++) for( j=0;j<3;j++) scanf("%d",&a[i][j]); exchange(a); } return 0; } int exchange(int a[3][3]) { int i,j; int b[3][3]; for(i=0;i<3;i++) for( j=0;j<3;j++) b[j][i]=a[i][j]; for( i=0;i<3;i++) { for( j=0;j<3;j++) printf("%d ",b[i][j]); printf("\n");} return 0; }
总结:时间限制没有通过。数组作为参数传递时间必须对数组初始化,并且注意类型相互对照。
int exchange(int a[3][3]);这个函数声明,你在使用时间不能
exchange( a[3][3]);
因为你这样传递的是a[3][3]元素本身,而不是整个数组;会与如下提示:
--------------------Configuration: 矩阵转置 - Win32 Debug--------------------
Compiling...
矩阵转置.cpp
F:\矩阵转置.cpp(14) : error C2664: 'exchange' : cannot convert parameter 1 from 'int' to 'int [][3]'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.类型不匹配的问题.
exchange( a);
而是把整个数组名传递过去。
2013.3.30
隔了半年看到自己曾经写的程序,有点想笑。
-
如果数量较少,直接寻找规律。
-
#include<iostream> using namespace std; int main(){ int n; cin>>n; while(n--){ int a,b,c,d,e,f,g,h,i; cin>>a>>b>>c>>d>>e>>f>>g>>h>>i; cout<<a<<" "<<d<<" "<<g<<endl<<b<<" "<<e<<" "<<h<<endl<<c<<" "<<f<<" "<<i<<endl<<endl; } }
-
第一行一个整数n<20,表示有n组测试数据,下面是n组数据;