这是作业。
我正在尝试使用以下公式将a
和b
数组相乘:
c[0]=a[0]*b[0]+a[0]*b[1]+a[0]*b[2]+....a[0]*b[n-1]
c[1]=a[1]*b[1]+a[1]*b[2]+a[1]*b[3]+....a[1]*b[n-1]
依旧......
但是这段代码似乎只能运行a
数组,但绝不会通过b
数组。结果我看到了这个:
6
12
18
9
6
15
任何指针都会非常感激。
我的代码 -
#include <iostream>
using namespace std;
const int n=6;
int main()
{
int a[n]= {2,4,6,3,2,5};
int b[n]= {3,2,1,4,2,3};
int c[n];
for (int h=0; h<n; h++)
{
for (int g=0; g<n; g++)
{
c[h] = a[h]*b[g];
}
}
for (int i=0; i<n; i++)
{
cout << c[i] << endl;
}
}
答案 0 :(得分:2)
您可以通过将A [i]作为公因子
来简化问题所以你得到了
c[0] =a[0] *(b[0]+b[1]+b[2]+...+b[n-1])
c[1] =a[1] *(b[1]+b[2]+...+b[n-1])
c[n-1]=a[n-1]*(b[n-1])
所以O(n)
解决方案是:
int sumB = 0;
for (int i=n-1; i >= 0; --i){
sumB += b[i];
c[i] = a[i] * sumB;
}
答案 1 :(得分:1)
c[h] = a[h]*b[g];
对于c[h]
的每个值,此行覆盖b
的值,因此仅保存最后一个值(a[n - 1] * b[n - 1]
)。您需要累积(累加)迭代b
的值,并且您需要事先初始化c[h]
。
for (int g=0; g<n; g++)
这遍历整个 b
数组,但您的伪代码显示您只想迭代h ... n。
这是一个(正确缩进!)解决方案:
int main() {
int a[n] = {2, 4, 6, 3, 2, 5};
int b[n] = {3, 2, 1, 4, 2, 3};
int c[n] = {0};
for (int h = 0; h < n; ++h)
for (int g = h; g < n; ++g)
c[h] += a[h] * b[g];
for (int i = 0; i < n; ++i)
std::cout << c[i] << '\n';
}
答案 2 :(得分:0)
您是否尝试将c数组中的每个元素作为a和b数组中每个相同元素的乘积?如果是这样,只需使用c [0] = a [0] * b [0],c [1] = a [1] * b [1]等。
答案 3 :(得分:0)
第16行应该是:
c[h] = c[h] + a[h] * b[g];
其余的代码看起来还不错!