矩阵乘法(C语言)
来源:互联网 发布:windows关闭网络唤醒 编辑:程序博客网 时间:2024/05/29 08:24
Description
矩阵乘法是线性代数中最基本的运算之一。
给定三个矩阵,请编写程序判断是否成立。
给定三个矩阵,请编写程序判断是否成立。
Input
输入包含多组数据。每组数据的格式如下:
第一行包括两个整数p和q,表示矩阵A的大小。后继p行,每行有q个整数,表示矩阵A的元素内容。
紧接着用相同的格式给出矩阵B和矩阵C。
输入数据的最后一行是两个0,你的程序处理到这里时就应该退出了。
输入数据中所有的整数绝对值都不超过100。
第一行包括两个整数p和q,表示矩阵A的大小。后继p行,每行有q个整数,表示矩阵A的元素内容。
紧接着用相同的格式给出矩阵B和矩阵C。
输入数据的最后一行是两个0,你的程序处理到这里时就应该退出了。
输入数据中所有的整数绝对值都不超过100。
Output
对每一组输入数据,你的程序都要输出单独一行字符。
如果成立则输出”Yes”
如果A和B根本不能相乘,或不成立,则输出”No”。注意大小写。
如果成立则输出”Yes”
如果A和B根本不能相乘,或不成立,则输出”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
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
题目链接 http://ccpc.ahu.edu.cn:8080/OJ/Problem.aspx?id=470No
No
题目考察要点。矩阵A X B=C
(1)两矩阵A B相乘的矩阵A的列必须等于矩阵B的行数,矩阵A与矩阵B才能相乘;
(2)矩阵C的行数必须等于矩阵A的行数,矩阵C列数必须等于矩阵B的列数;
若不太理解矩阵乘法可以用简单的几个数试一下,对应行乘对应列
AC的代码
#include<stdio.h>int main(){int a1,a2,b1,b2,c1,c2, p,q,i,j,n,m,k,k1,k2,r1,r2, a[100][100], b[100][100], c[100][100],temp, r[100][100] ; while(scanf("%d %d",&p, &q)) //限制输出的的组数{ if(p==0&&q==0) break;for(a1=0;a1<p;a1++)for(a2=0;a2<q;a2++)scanf("%d",&a[a1][a2]);scanf("%d %d",&m, &n);for(a1=0;a1<m;a1++)for(a2=0;a2<n;a2++)scanf("%d",&b[a1][a2]);scanf("%d %d",&i, &j);for(c1=0;c1<i;c1++)for(c2=0;c2<j;c2++)scanf("%d",&c[c1][c2]); //定义的输出的几组数据if((q!=m)||(i!=p)||(j!=n)) printf("No\n"); //判断不满足矩阵相乘条件,若要判断满足条件不一定能考虑全情况else {for(a1=0;a1<p;a1++){for(a2=0;a2<n;a2++){temp=0;for(k=0;k<m;k++){temp+=a[a1][k]*b[k][a2];//相乘的算法}if(temp!=c[a1][a2]) printf("No\n");//对应判断行列相乘的结果,与结果的矩阵对应比较又不满足的就跳出}}if(i==p &&j==n) printf("Yes\n");else printf("No\n");}}return 0;}
效率的提高可以用判断结果对应位置只要不满足就跳出。不需要用每一个位置都判断。
后期学长给的代码
#include<stdio.h>int main(){ int A[100][100],B[100][100],C[100][100],A_n,A_m,B_n,B_m,C_n,C_m,i,j,k,sum; while(scanf("%d%d",&A_n,&A_m) && ( A_n || A_m )){ for(i=0;i<A_n;i++) for(j=0;j<A_m;j++){ scanf("%d",&A[i][j]); } scanf("%d%d",&B_n,&B_m); for(i=0;i<B_n;i++) for(j=0;j<B_m;j++){ scanf("%d",&B[i][j]); } scanf("%d%d",&C_n,&C_m); for(i=0;i<C_n;i++) for(j=0;j<C_m;j++){ scanf("%d",&C[i][j]); } if(A_m!=B_n || (A_n!=C_n || B_m!=C_m))printf("No\n"); else{ for(i=0;i<A_n;i++) for(j=0;j<B_m;j++){ sum=0; for(k=0;k<A_m;k++) sum+=A[i][k]*B[k][j]; if(sum!=C[i][j])break; } if(i==A_n && j==B_m)printf("Yes\n"); else printf("No\n"); } } return 0; }
阅读全文
0 0
- 矩阵乘法(C语言)
- C语言矩阵乘法
- C语言矩阵乘法(指针实现)
- 矩阵乘法C语言实现
- C语言实现矩阵乘法
- C语言实现矩阵乘法
- C语言 · 矩阵乘法
- 二维数组动态分配(c语言)之HWOJ矩阵乘法
- 矩阵的乘法和求逆(C语言实现)
- 复数矩阵乘法C语言实现
- 复数矩阵乘法C语言实现
- 矩阵乘法的C语言实现
- C语言、C++矩阵乘法优化
- (C语言)高精度乘法
- C语言指针描述矩阵乘法实记
- C语言之两矩阵乘法的实现
- 矩阵乘法计算脚本代码(C#)
- 【codevs1287】矩阵乘法(矩阵乘法)
- arcgis rest api 离线部署与应用
- scikit-learn基础介绍
- php-杨辉三角
- jquery-1.7.1.min.js 官方下载报错,问题解决办法
- 理解Angular中的$apply()和$digest()
- 矩阵乘法(C语言)
- Eclipse 插件开发
- CSS利用vertical-align实现上下居中
- JSP基本知识(一)
- ffmpeg字幕
- Android Studio多渠道打包如何使用不同的资源,依赖和java代码
- Android Studio 打包jar中包含另一个jar或多个jar时解决方案
- 离线安装windows 10 Net3.5
- JavaScript基础01