计蒜客T1136矩阵乘法,用例可通过,无法提交
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m ,k;
cin >> n >> m >> k;
int a[n][m], b[m][k];
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cin >> a[i][j];
}
}
for(int i = 0; i < m; i++)
{
for(int j = 0; j < k; j++)
{
cin >> b[i][j];
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < k; j++)
{
int res = 0;
for(int p = 0; p < m; p++)
{
res += a[i][p] * b[p][i];
}
cout << res;
if(j == k - 1)
{
cout << endl;
}
else cout << " ";
}
}
return 0;
}
可能是不支持动态数组。int a[n][m], b[m][k];这么写有的编译器不识别,用大数组代替
int a[1000][1000], b[1000][1000];
或者用指针也行。用指针的话代码修改如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m ,k;
cin >> n >> m >> k;
int**a,**b;
a = new int*[n];
for(int i=0;i<n;i++)
a[i] = new int[m];
b = new int*[m];
for (int i = 0;i<m;i++)
b[i] = new int[k];
//int a[n][m], b[m][k];
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cin >> a[i][j];
}
}
for(int i = 0; i < m; i++)
{
for(int j = 0; j < k; j++)
{
cin >> b[i][j];
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < k; j++)
{
int res = 0;
for(int p = 0; p < m; p++)
{
res += a[i][p] * b[p][i];
}
cout << res;
if(j == k - 1)
{
cout << endl;
}
else cout << " ";
}
}
//释放空间
for(int i=0;i<n;i++)
delete[] a[i];
delete[] a;
for (int i = 0;i<m;i++)
delete[] b[i];
delete[] b;
a=0;b=0;
return 0;
}
第七行是啥啊,数组长度必须是编译时可计算的常量