akoj-1055-矩阵乘法









矩阵乘法

Time Limit:1000MS  Memory Limit:65536K

Total Submit:19 Accepted:7

Description

矩阵乘法是线性代数中最基本的运算之一。 

给定三个矩阵 A\B\C 请编写程序判断AB = C 是否成立。


Input

输入包含多组数据。每组数据的格式如下: 

第一行包括两个整数p 和q,表示矩阵A 的大小。后继p 行,每行有q 个整数,表示矩阵A 

的元素内容。 

紧接着用相同的格式给出矩阵B 和矩阵C。 

输入数据的最后一行是两个0,你的程序处理到这里时就应该退出了。 

输入数据中所有的整数绝对值都不超过100。


Output

对每一组输入数据,你的程序都要输出单独一行字符。 

如果 AB=C成立则输出”Yes” 

如果 A 和B 根本不能相乘,或AB=C不成立,则输出”No”。注意大小写。


Sample Input


2 3
1 2 3
4 5 6
3 2
1 2
3 4
5 6
2 2
22 28
49 64
1 2
1 2
2 1
2
1
2 2
2 4
1 2
1 2
1 2
1 1
1
1 1
1

0 0


Sample Output


Yes
No
No


Hint

此题考察线性代数基本概念,请参阅线性代数教材。

Source

2009中科大ACM校赛-普及版

[Submit]  
[
Go Back]   [Status]  
[
Discuss]









#include <stdio.h>
#include <string.h>
#define MAXN 101

int a[MAXN][MAXN], b[MAXN][MAXN], c[MAXN][MAXN], d[MAXN][MAXN];

int main()
{
int i, j, m, n, x, y, u, v, p;
while ( ~scanf(“%d%d”, &m, &n))
{
if ( m == 0 && n == 0 ) break;
for ( i=0; i<m; i++ ) {
for ( j=0; j<n; j++ ) {
scanf(“%d”, &a[i][j]);
}
}
scanf(“%d%d”, &x, &y);
for ( i=0; i<x; i++ ) {
for ( j=0; j<y; j++ ) {
scanf(“%d”, &b[i][j]);
}
}
scanf(“%d%d”, &u, &v);
for ( i=0; i<u; i++ ) {
for ( j=0; j<v; j++ ) {
scanf(“%d”, &c[i][j]);
}
}
if ( n != x || m != u || v != y ) {
puts(“No”);
}
else {

for ( i=0; i<u; i++ ) {
for ( j=0; j<v; j++ ) {
d[i][j] = 0;
for ( p=0; p<n; p++ ) {
d[i][j] += a[i][p] b[p][j];
}
if ( d[i][j] != c[i][j] ) break;
}
}
if ( i == u && j == v ) puts(“Yes”);
else puts(“No”);
}
}

return 0;
}


坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者: Fayne
  • 本文链接: 382.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!