MATRIX MULTIPLICATION CALCULATOR
题意:
求两矩阵相乘
题解:
应该都学过把。。。矩阵相乘
矩阵相乘的前提是两个矩阵的列等于另一个矩阵的行
也就是cij=∑aik*bkj
原理很简单注意格式,但是我遇到一个玄学问题。。。
就是卡格式了。。我人都傻了
为啥我这case都是最后输出???
如果是输出undefined就是正常的
人傻了。。
代码:
格式错误代码:
#include<bits/stdc++.h> using namespace std; const int maxn=2000; int pos[maxn]; int a[40][40]; int b[40][40]; int c[40][40]; int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); ios::sync_with_stdio(false); int n,m,p,q; int cas=0; while(cin>>n>>m>>p>>q) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); if(n==0&&m==0&&p==0&&q==0)return 0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } for(int i=1;i<=p;i++) { for(int j=1;j<=q;j++) { cin>>b[i][j]; } } printf("Case #%d:\n",++cas); if(m!=p) { printf("undefined\n"); } else { for(int i=1;i<=n;i++) { cout<<"| "; for(int x=1;x<=q;x++) { for(int j=1;j<=m;j++) { c[i][x]+=a[i][j]*b[j][x]; } cout<<c[i][j]<<" "; } cout<<"|"<<endl; } } } }
正确代码:
#include<bits/stdc++.h> using namespace std; int m,n,p,q; int a[25][25],b[25][25]; int main() { int t=1; while(1){ cin>>m>>n>>p>>q; if(m==0||n==0||p==0||q==0) return 0; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; } } for(int i=0;i<p;i++){ for(int j=0;j<q;j++){ cin>>b[i][j]; } } printf("Case #%d:\n",t); if(n==p){ for(int i=0;i<m;i++){ printf("| "); for(int j=0;j<q;j++){ int c=0; for(int k=0;k<n;k++) c+=a[i][k]*b[k][j]; printf("%d ",c); } printf("|\n"); } }else printf("undefined\n"); t++; } }