51nod1140 矩阵相乘结果的判断

51nod1140 矩阵相乘结果的判断
题意 判断 矩阵 A * B 是否等于 C

随机矩阵
若 A*B==C ----> X*(A*B) = X*C
但是反向不能推
这时我们 随机出一个行向量 X 看一下是否符合该要求,
因为 出题人不知道我们 随机的矩阵长什么样,所以这样 随机一次这个矩阵就应该够了

 

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <string>
 6 #include <algorithm>
 7 #include <iomanip>
 8 #include <iostream>
 9 #include <ctime> 
10 using namespace std ; 
11 
12 const int maxn = 501 ; 
13 int n ;
14 int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],sum1[2][maxn],sum2[2][maxn],sum3[2][maxn]  ; 
15 int rnd[maxn][maxn] ; 
16 bool ok ; 
17 
18 using namespace std ; 
19 
20 int main() 
21 {
22     scanf("%d",&n) ; 
23     srand(time(0)) ;
24     for(int i=1;i<=n;i++) 
25         for(int j=1;j<=n;j++) scanf("%d",&a[ i ][ j ]) ;
26     for(int i=1;i<=n;i++) 
27         for(int j=1;j<=n;j++) scanf("%d",&b[ i ][ j ]) ;
28     for(int i=1;i<=n;i++) 
29         for(int j=1;j<=n;j++) scanf("%d",&c[ i ][ j ]) ;   
30     for(int i=1;i<=n;i++) rnd[1][i] = rand() % 17;
31     int i = 1 ; 
32         for(int j=1;j<=n;j++) 
33             for(int k=1;k<=n;k++) 
34                 sum1[i][j] += rnd[i][k] * a[k][j] ;  
35         for(int j=1;j<=n;j++) 
36             for(int k=1;k<=n;k++) 
37                 sum2[i][j] += sum1[i][k] * b[k][j] ; 
38          for(int j=1;j<=n;j++) 
39              for(int k=1;k<=n;k++) 
40                  sum3[i][j] += rnd[i][k]  * c[k][j] ; 
41     ok = 1 ;
42     for(int j=1;j<=n;j++) if(sum2[1][j] != sum3[1][j]) ok = false ;
43     if(ok) printf("Yes\n") ; 
44         else printf("No\n") ; 
45     
46     return 0 ;
47 }

 

转载于:https://www.cnblogs.com/third2333/p/6928792.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值