Problem Statement
Takahashi, Aoki and Snuke love cookies. They have A, B and C cookies, respectively. Now, they will exchange those cookies by repeating the action below:
- Each person simultaneously divides his cookies in half and gives one half to each of the other two persons.
This action will be repeated until there is a person with odd number of cookies in hand.
How many times will they repeat this action? Note that the answer may not be finite.
Constraints
- 1≤A,B,C≤109
Input
Input is given from Standard Input in the following format:
A B C
Output
Print the number of times the action will be performed by the three people, if this number is finite. If it is infinite, print -1
instead.
Sample Input 1
4 12 20
Sample Output 1
3
Initially, Takahashi, Aoki and Snuke have 4, 12 and 20 cookies. Then,
- After the first action, they have 16, 12 and 8.
- After the second action, they have 10, 12 and 14.
- After the third action, they have 13, 12 and 11.
Now, Takahashi and Snuke have odd number of cookies, and therefore the answer is 3.
Sample Input 2
14 14 14
Sample Output 2
-1
Sample Input 3
454 414 444
Sample Output 3
1
a==b==c的时候会死循环,其他情况暴力算就行了,因为每一次操作之后最大值-最小值会减半,所以不久就能到达终止条件。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int A,B,C,tot,a,b,c;
int main(){
scanf("%d%d%d",&A,&B,&C);
while(!((A&1)||(B&1)||(C&1))){
if(A==B&&B==C){
puts("-1");
return 0;
}
tot++,a=(B+C)>>1,b=(A+C)>>1,c=(B+A)>>1;
A=a,B=b,C=c;
}
printf("%d\n",tot);
return 0;
}