0820欢乐赛

相同的整数
问题描述
有三个整数A AA、B BB和C CC,有以下两种操作可供你选择:

从A AA、B BB、C CC中任选两个数,使它们都增加1 11
从A AA、B BB、C CC中任选一个数,使它增加2 22
请问如果想让A AA、B BB、C CC都相等,最小需要操作几次。

输入格式
第一行,三个空格间隔的整数A AA、B BB、C CC。

0 ≤ A , B , C ≤ 50 0\le A,B,C\le 500≤A,B,C≤50
A AA、B BB、C CC均为整数。
输出格式
一个整数,表示最小需要操作的次数。

样例
样例输入 1
2 5 4
1
样例输出 1
2
1
样例输入 2
2 6 3
1
样例输出 2
5
1
样例输入 3
31 41 5
1
样例输出 3
23
1
提示
样例一:

第一步,将2 22和4 44都增加1,得到3 33、5 55、5 55。
第二步,将3 33增加2 22,得到5 55、5 55、5 55。
思路及代码
我们先将3个数从小到大排序;
接下来算出第1、2个数与最大的数的差距总和。
接下来分情况讨论:

如果这个差距总和是偶数,那么不管用哪种操作,差距总和都会减2。总操作数为差距总和÷ 2 \div 2÷2。
如果这个差距总和是奇数,我们可以将最大数和另一个数分别加1,剩下的那个数不变。差距总和加1,变为偶数。接下来按情况1操作。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[3];
int main(){
    int x,y;
    for(int i = 0; i < 3; i++){
        scanf("%d",&a[i]);
    }
    sort(a,a+3);
    x = a[2]-a[0];
    y = a[2]-a[1];
    if((x-y)%2 == 1){
        printf("%d",(x+y+1)/2+1);
    }else{
        printf("%d",(x+y)/2);
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值