c ++中的数组乘法

时间:2013-05-24 17:24:21

标签: c++ for-loop nested

这是作业。

我正在尝试使用以下公式将ab数组相乘:

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;
}
}

4 个答案:

答案 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];

其余的代码看起来还不错!