题意:就是给你一些数,这些数中其中有两个数是x+y的值和x-y的值,求使x*y的最大值。
思路:当两个数的和一定时,若要使x*y得值越大,则x和y越接近越好,即x-y得差越小越好。因此,我们可以先对元素进行排序,然后用后面的元素作为和,前面的元素作为差即可,并且进行比较,最后取最大值即可。
代码:
class SimpleGuess
{
public:
int getMaximum(vector <int> hints)
{
int i,j,k;
int num[105];
int len = hints.size();
for(i = 0;i < len;++i)
num[i] = hints[i];
sort(num,num+len);
int ans = 0,mmax = 0;
bool flag = 0;
for(i = len-1;i >= 0; --i){
j = 0;
while(1){
if(j >= len)break;
int x = (num[i] + num[j])%2;
if(x){
j++;
}
else{
x = (num[i] + num[j])/2;
int y = num[i] - x;
ans = x*y;
if(ans > mmax) mmax = ans;
flag = 1;
break;
}
}
}
return mmax;
}
// $TESTCODE$
};