【问题标题】:how to add a sum of even and odd number of an array如何将数组的偶数和奇数相加
【发布时间】:2014-08-14 12:22:28
【问题描述】:

我正在尝试从递归数组中获取偶数的总和以及奇数的总和,然后将两个总和相加。我正在尝试遍历数组以获得偶数,但它会继续返回第一个索引。请帮助并提前感谢..

我的目标是在数组 2,1,5,9,8,4 中获取偶数索引并将其添加到奇数索引中。 a[0]=2,a[1]=1,a[2]=5,a[3]=9,a[4]=8,a[5]=4。所以需要 (2+5+8)-(1+9+4)=1

这是我到目前为止所得到的,我不熟悉递归,所以我的代码可能会关闭

int calc(int *a, int size)
{
    if(size==1 || size==0)
        return a[0];
    for(int i=0; i<size; i++){
        if(i%2==0){
            int sum_i = a[i];
            int m=calc(a, size-1);
            if(m>a[size-1])
                return m;
        }
    }
    for(int j=0; j<size; j++){
        if(j%2!=0);
        int sum_j = a[j];
        return sum_j;
    }
    int sum = a[i] - a[j];
    int e = calc(a, size-1);
    if(e%2==0)
        return e=e+0; //return even

    return sum;
}

int main( )
{
    int a[6]={1,2,3,5,6,2};
    int size = 6;   
    cout<< calc(a, size)<<endl;

    system("pause");   
    return 0;
}

【问题讨论】:

  • 为什么要循环遍历数组两次?当您确定数组元素是偶数还是奇数时,请使用您的逻辑将数字添加到正确的总和值。这对于大型数组来说尤其重要,因为您不想再循环了。
  • 您对声明if(j%2!=0); 的意图是什么?你希望这能做什么?

标签: c++ visual-c++


【解决方案1】:

你不需要递归吗?

// calc(): returns sum(a[0], a[2], a[4], ...) - sum(a[1], a[3], a[5], ...)
int calc(int *a, int size)
{
    int sum_even_pos = 0;
    int sum_odd_pos = 0;
    for (int i = 0; i < size; i++) 
    {
        sum_even_pos += a[i];
        if (++i < size) sum_odd_pos += a[i];
    }
    return sum_even_pos - sum_odd_pos;
}

http://codepad.org/DVx0sgg1

【讨论】:

  • 链接中的输出不应该是-1吗? 1 + 3 + 5 = 9, 2 + 6 + 2 = 10, 9 - 10 = -1.
  • 不。 1 + 3 + 6 = 10, 2 + 5 + 2 = 9, 10 - 9 = 1
  • 从什么时候开始 6 是奇数?从什么时候开始 5 是偶数?我现在看到这应该是偶数和奇数索引的总和,但你的变量名没有反映这一点。
  • 你是对的。再一次,我的大错误是在喝咖啡之前编码:/
  • 这为我指明了正确的方向,所以我必须使其递归以用于实际目的。
猜你喜欢
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多