我有一项任务。我必须寻找最大利润。
例如:
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
;
答案 0 :(得分:2)
我想我有一个答案,但问题是它是否适合您的复杂性要求。
所以给你一个数组/整数组(我假设所有数字都是正数,偶数和奇数的分布是相等的 - 否则不需要分成2组)。
even_sum
。odd_sum
中的元素求和。odd_sum
中减去它:odd_sum -= smallest_odd;
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;
希望能够解释这个想法。