如何得到数组中偶数元素的奇数和乘法之和

时间:2015-02-12 04:26:55

标签: c++

如何在得到我的程序错误并退出的值后得到所有奇数和正偶数乘积的总和。如何解决此问题以及为什么会发生此类错误,如果我输入小于5的值,则会给出内存地址

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
    int n,sum=0,mul=0,i,j;
    cout<<"How many numbers you want to enter?";
    cin>>n;
    int arr[n],odd[]={0,0,0,0,0},even[5];
    for(i=0;i<n;i++)
    {
        cout<<"Enter Val "<<i+1<<": ";
        cin>>arr[i];
    }
    for(j=0;j<n;j++)
    {
        if(arr[j]%2==0)
        {
            even[j]=arr[j];
        }
        else
        {
            odd[j]=arr[j];
        }
    }
    for(j=0;j<n;j++)
    {
        sum+=odd[j];

        mul*=even[j];

    }
    cout<<"Sum of Odd "<<sum<<endl;
    cout<<"Product of Even "<<mul<<endl;

    return 0;
}

初始化数组奇数后奇数的总和,但产品仍然没有!

2 个答案:

答案 0 :(得分:3)

您的代码中存在一些问题。 arr[n]是非标准的C ++,你只允许自己5个插槽用于你的奇数和偶数(如果用户想要输入20个数字怎么办?)此外,你总是在写j数字为odd[j]even[j] ...这意味着如果第一个数字是奇数而第二个数字是偶数,那么您现在将值写入even[1]但是从未向even[0]写过任何内容。您没有正确填充数组,最终会得到几个未初始化的int,这会使您的最终计算不确定。

简单的解决方案是根本不回避所有这些问题,因为你根本不需要它们:

int odd = 0, even = 1;
cin >> n;

int x;
for (int i = 0; i < n; ++i) {
    // get the next value
    cin >> x;

    // either multiply or add it as appropriate
    if (x % 2 == 0) {
        even *= x;
    }
    else {
        odd += x;
    }
}

答案 1 :(得分:0)

所以,我同意巴里提供的答案。但是,如果这是一个需要使用数组的学校作业,您仍然需要使用它们。

如果是这种情况,请解决此问题:

&#34;此外,你总是将第j个数字写入奇数[j]或甚至[j] ......这意味着如果第一个数字是奇数而第二个数字是偶数,那么你现在写了一个值甚至[1]但从未写过任何东西甚至[0]。您没有正确填充数组,并且最终会出现几个未初始化的整数,这会使您的最终计算成为未定义的行为。&#34;

考虑通过对数组项的两个不同测试运行用户定义长度数组(即arr [n]):一个查找偶数元素,一个查找奇数元素。

除非另有说明,否则你可能不应该将even []和odd []的数组大小任意限制为只有五个项目。