回 帖 发 新 帖 刷新版面

主题:[讨论]C++,求高手解决

Description 

宿舍楼决定举行CounterStrike游戏大赛,为了使比赛更为精彩,大家决定将所有参赛同学先平均分为东西部两大联盟再组队对战,根据之前比赛的统计,每个同学的游戏战斗力分别为S1,S2,S3...SN.(S<=100000)。现在需要你将参赛同学平均分到两大联盟中,使得两联盟的总战斗力的差为最小,以增加比赛的激烈性。要注意的是两联盟的人数不一定相同,比如一个战斗力90000的同学能够以一敌十。 



Input 

该程序有多组测试数据,每组测试数据第一行为整数N(1<=N<=20),表示有N个同学。接下去N行,为每个同学的战斗力。

Output 

每组测试数据只需输出经过划分后两联盟的总战斗力差的最小值。

Sample Input 


5
5
8
13
27
14
2
4
4


Sample Output 


3
0

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int N,power[21],half,SUM,tempsum;
    while(cin>>N)
    {   SUM=0;

        for(int i=0;i<N;i++)
        {cin>>power[i];SUM+=power[i];}
        half=SUM/2;
        for(int i=0;i<N;i++)
            for(int j=i;j<N;j++)
                if(power[i]>power[j])
                {
                    int t;
                    t=power[i];
                    power[i]=power[j];
                    power[j]=t;
                }
        tempsum=0;
        for(int i=N-1;i>=0;i--)
        {
            if(tempsum+power[i]<=half)
            {
                tempsum+=power[i];
            }
        }
        cout<<abs(SUM-2*tempsum)<<endl;
    }
    return 0;
}
>>>>>>>>>>>>>>>>
为什么WA呢???

回复列表 (共2个回复)

沙发

#include<stdio.h>
#include<stdlib.h>

int cmp(const void *p,const void *q)
{
    return *(int *)q-*(int *)p;
}

int main()
{
    int a[20];
    int n,m=0;
    printf("输入同学数:\n");
    scanf("%d",&n);
    printf("输入每个同学的战斗力:\n");
    while(n)
    {
        scanf("%d",&a[m]);
        n--;
        m++;
    }
    int i,sum=0,s,sum1=0,sum2;
    for(i=0;i<m;i++)
        sum=sum+a[i];
    s=sum/2;
    qsort(a,m,sizeof(a[0]),cmp);
    for(i=0;i<m;i++)
    {
        if(s>=a[i])
        {
            s=s-a[i];
            sum1=sum1+a[i];
        }
    }
    sum2=sum-sum1;
    printf("战斗力差最小值为:%d\n",abs(sum1-sum2));
    return 0;
}

板凳


怎么是wa啊。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册