搜索最大值

时间:2015-09-28 13:58:32

标签: algorithm

我有一项任务。我必须寻找最大利润。

例如:

5
2 4 3 3 3

结果:

12

因为我必须搜索最大值n % 2 == 0,其中n是最大值。

这是我的实际代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
int n;
cin >> n;
int suma = 0;
int min;
int tab[n];
    for(int i = 0; i < n; i++)
    {
        cin >> tab[i];
        if(n==1 && tab[i] % 2 != 0)
            {
                puts("NIESTETY");
                return 0;
            }
    }
    sort(tab, tab+n);
    for(int i = 0; i < n;i++)
        {
        suma +=tab[i];
        }
    if(suma % 2 == 0 ) cout << suma << endl;
    else
    {   for(int i = 0; i < n; i++)
        {
            if(tab[i] % 2 == 1)
            {
                suma = suma- tab[i];
                break;
            }
        }
        cout << suma << endl;
    }

}

if(n==1 && n%2 !=0) I must cout << "NO" << endl;

例如:

5
1 2 3 4 5

我的代码返回10;

正确的分数应为 14 ;

3 个答案:

答案 0 :(得分:2)

我想我有一个答案,但问题是它是否适合您的复杂性要求。

所以给你一个数组/整数组(我假设所有数字都是正数,偶数和奇数的分布是相等的 - 否则不需要分成2组)。

  1. 将此组分为两组。一个将包含奇数,而第二个将包含偶数。
  2. 您希望总和最大,甚至可以将所有偶数加到even_sum
  3. 对奇数数组odd_sum中的元素求和。
  4. 如果奇数数组中的元素数是奇数,则找到最小的奇数,然后从odd_sum中减去它:odd_sum -= smallest_odd;
  5. 结果为even_sum + odd_sum

答案 1 :(得分:1)

您正在应用正确的算法,但存在一些实施问题:

1-你忘记初始化min(你应该将它初始化为一个巨大的值)然后再查找最小的奇数

2-你只能在一个循环中找到min和sum,不需要两个循环

3-无需对数组进行排序,此操作对此问题无用。

答案 2 :(得分:0)

编辑基于其他答案

这是我如何用伪代码解决它:

sum = 0;
min = MAX_VALUE;

for (i = 0; i < array.length; i++) {
    sum = sum + array[i];
    if ( array[i] % 2 == 1 && array[i] < min ) {
        min = array[i];
    }
}

if ( sum % 0 != 0 ) {
    sum = sum - min;
}
print "sum = " + sum;

希望能够解释这个想法。