A*B Problem II

来源:互联网 发布:核聚变发电 知乎 编辑:程序博客网 时间:2024/05/19 16:04

A*B Problem II

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
ACM的C++同学有好多作业要做,最头痛莫过于线性代数了,因为每次做到矩阵相乘的时候,大量的乘法都会把他搞乱,所以他想请你写个程序帮他检验一下计算结果是否正确。
输入
有多组测试数据,每行给出一组m,n,k(0<m,n,k<=50)。m,n,k表示两个矩阵的大小,其中:
矩阵A:m行n列。
矩阵B:n行k列。
接下来给出m*n个数表示矩阵A和n*k个数表示矩阵B,对于每个数s,0<=s<=1000。
当m,n,k同时为0时结束。
输出
计算两个矩阵的乘积并输出。
样例输入
2 1 3121 2 32 2 31 23 41 0 10 1 00 0 0
样例输出
1 2 32 4 61 2 1

3 4 3

代码实现:(C++)

#include<iostream>
using namespace std;
int main()
{
int m,n,k,i,j,a;
  int A[ 50 ][ 50 ], B[ 50 ][ 50 ], C[ 50 ][ 50 ]={0};
while(cin>>m>>n>>k&&m&&n&&k)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>A[i][j];
}
}
//输入B矩阵的值 
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
cin>>B[i][j];
}
}
//开始计算矩阵乘法
for(i=0;i<m;i++)
{
for(j=0;j<k;j++)
{
C[i][j]=0;
for (a=0;a<n;a++)
C[i][j]+=A[i][a]*B[a][j];
}
}
//输出矩阵C
for (i=0;i<m;i++)
{
for(j=0;j<k;j++)
cout<<C[i][j]<<" ";
cout<<endl;
}  
}
return 0;
 } 


但是上述代码运行会超时,将其改为C语言版,AC了,不知道  为什么相同的代码用C++写比C语言写运行所耗费的时间要多??(高手请解答)

(C语言)


#include<stdio.h>
int main()
{
int m,n,k,i,j,a;
  int A[ 50 ][ 50 ], B[ 50 ][ 50 ], C[ 50 ][ 50 ]={0};
while(scanf("%d%d%d",&m,&n,&k)&&m&&n&&k)
{
//输入A矩阵的值 
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&A[i][j]);
}
}
//输入B矩阵的值 
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
scanf("%d",&B[i][j]);
//cin>>B[i][j];
}
}
//开始计算矩阵乘法
for(i=0;i<m;i++)
{
for(j=0;j<k;j++)
{
C[i][j]=0;
for (a=0;a<n;a++)
C[i][j]+=A[i][a]*B[a][j];
}
}
//输出矩阵C
for (i=0;i<m;i++)
{
for(j=0;j<k;j++)
//cout<<C[i][j]<<" ";
printf("%d ",C[i][j]);
//cout<<endl;
printf("\n");
}  
}
return 0;
 } 


已经找到原因了:(来自:博客http://blog.csdn.net/l2580258/article/details/51319387)

cin cout效率没scanf printf高为何用 
主要有以下几个原因: 
1.流输入输出对于基本类型来说使用很方便,不用手写格式控制字符串。 
2.对于标准库的一些class来说,显然重载操作符也比自己写格式控制字符串要方便很多。 
3.对于复杂的格式可以进行自定义操作符。 
4.可读性更好(这个很多人有不同意见,见仁见智了)。

其实原理上来说流操作的效率比printf/scanf函数族更高,因为是在编译期确定操作数类型和调用的输出函数,不用在运行期解析格式控制字符串带来额外开销。不过标准流对象cin/cout为了普适性,继承体系很复杂,所以在对象的构造等方面会影响效率,因此总体效率比较低。如果根据特定的场景进行优化,效率可以更高一点。

C++中cin,cout是不是效率不如scanf,printf

十分正确,如果你是做io比赛的或者是做acm的,尽量不要用cin,cout,你试试打印99999999就知道,它们之间速度大概相差10几倍


原创粉丝点击