如何求数组中奇数元素的和和和偶数元素的乘

How to get sum of odd and multiplication of even element in array

本文关键字:元素 何求 数组      更新时间:2023-10-16

如何在得到值后得到所有奇数的和和和正偶数的乘积我的程序给出了错误并退出。如何解决这个问题,为什么会发生这种错误,如果我输入的值小于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;
}

初始化数组奇数后奇数的和起作用,但乘积仍然没有!

您的代码中存在一些问题。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;
    }
}

所以,我同意Barry提供的答案。然而,如果这是一项学校作业,要求你使用数组,你仍然需要使用它们。

如果是这种情况,为了解决这个问题:

"此外,你总是把第j个数字写为奇数[j]或偶数[j]……这意味着,如果第一个数字是奇数,第二个数字是偶数,你现在把一个值写为偶数[1],但从来没有把任何东西写为偶数[0]。你没有正确地填充数组,最终会得到几个未初始化的int,这会使你的最终计算行为不确定。"

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

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