1

这是家庭作业。

我正在尝试使用以下公式将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;
}
}
4

4 回答 4

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;
}
于 2013-05-24T17:50:05.203 回答
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';
}
于 2013-05-24T17:31:02.577 回答
0

您是否试图让 c 数组中的每个元素成为 a 和 b 数组中每个相同元素的乘积?如果是这样,只需使用 c[0] = a[0]*b[0]、c[1] = a[1]*b[1] 等。

于 2013-05-24T17:36:26.970 回答
0

第 16 行应该是:

c[h] = c[h] + a[h] * b[g];

其余代码看起来没问题!

于 2013-05-24T17:39:00.343 回答