这里定义两队的实力差为每队的 CrossFire 分数之和的差值,现在他们想要知道这个实力差最小是多少。
示例:
输入:2 1 3 4
输出:0
下面附上我的代码:
#include
#include
int main(void)
{
int sum,i,j,num[4]={0},sum1=0,mincha=10000,t;
for(i=0,sum=0;i<4;i++)
{
scanf("%d",num+i);
sum+=num[i];
}
for(i=0;i<4;i++,sum1=0)
for(j=0;j<4&&j!=i;j++)
{
sum1+=(num[i]+num[j]);
t=fabs(2*sum1-sum);
if(tprintf("%d",mincha);
return 0;
}
再来看问题的延伸推广:
输入2n个数,你的任务是:求出其中任意n个数的和sum1,求出剩下的n个数的和sum2,使得sum1与sum2的差的绝对值最小并将其输出。
由于本人算法实在很弱,所以恳请网友能留下一些真知灼见,如果有可实现代码(最好是c)那再好不过。
先把2n个数排序,然后sum1去拿最大最小俩个数,去掉这俩个数,sum2再去拿新的最大最小俩个数