相同的整数
问题描述
有三个整数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;
}