题目描述:
输入4个物品的质量,需要让2个人携带。请问怎样分配2个人所携带的物品,使两人重量差距最小,输出这个最小差距。
【输入格式】
1行,4个整数,范围在[1…100]。
【输出格式】
1个整数,表示最小差距。
输入样例 | 输出样例 |
20 10 30 15 | 5 (注:第1个人10+30=40 第2个人20+15=35) |
这道题就直接将4个物品的重量从小到大排好序,然后平均分。
80分代码
#include<bits/stdc++.h>
using namespace std;
int a[10],b,c;
int main(){
for(int i=1;i<=4;i++) cin>>a[i];
sort(a+1,a+1+4);
b=a[1]+a[4];
c=a[2]+a[3];
if(b>c) swap(b,c);
cout<<c-b;
return 0;
}
之所以有20分拿不到是因为不够周全,万一!它的数据是这样的:
10 10 10 40
正常来讲就是:
10+10+10➡30 40一个对吧,这样就只相差了10;
但当我们按照原本做法两两搭配时:
10+10➡20 10+40➡50 这样反而相差得更多了
所以我们需要在判断是附加一个条件,就是可以加多一个:
if((a[1]+a[2+a[2]+a[3])<a[4])
{
cout<<a[4]-(a[1]+a[2]+a[3]);
return 0;
}
100分代码
#include<bits/stdc++.h>
using namespace std;
int a[10],b,c;
int main(){
for(int i=1;i<=4;i++) cin>>a[i];
sort(a+1,a+1+4);
if((a[1]+a[2]+a[3])<a[4])
{
cout<<a[4]-(a[1]+a[2]+a[3]);
return 0;
}
b=a[1]+a[4];
c=a[2]+a[3];
if(b>c) swap(b,c);
cout<<c-b;
return 0;
}
今天的分享就到这里,觉得好的可以点个关注,点个赞哦