3051 - 找规律系列之:醋神爱玩BALL
时间限制 : 1 秒
内存限制 : 128 MB
醋神爱玩BALL,大家都知道,而且玩着玩着,玩的脸残了(默哀3分钟),但他又碰到了关于BALL的
游戏,所以他又要去玩了:已知有两个盒子,有A个BALLS在第一个盒子中,有B个BALLS在第二个盒子里且
球数满足(0<A+B<=2147483648).现在醋神要求将若干个球从一个盒子移动到另一个盒子,而且要求移动球
的个数与目标盒子内球的个数相同,你要判断的是,能不能把其中一个盒子的球,经过若干次移动全部移
空,如果可以输出最少移动次数,否则输出-1.雯神表示“玩个BALL的BALL呀,还不如揉揉自己脸上的肉肉”。
题目输入
包含多组数据,每一行包含两个数A B
题目输出
对于每组输入数据,如果可以满足条件,输出最小移动次数,否则输出-1
输入/输出样例
输入格式
2 6
输出格式
2
C++解答
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; long long gcd(long long a,long long b) { if(b==0) return a; else return gcd(b,a%b); } int main() { //freopen( "B.txt", "r", stdin ); // freopen( "_B.txt", "w", stdout ); long long a,b; while(cin>>a>>b) { long long g=gcd(a,b); a=a/g; b=b/g; // cout<<a<<" "<<b<<endl; long long ans=a+b; long long sum=ans; // cout<<ans<<endl; bool flag=0; for(; ;) { if(ans&1) { if(ans==1) { flag=1; } break; } ans/=2; } if(flag==0) { cout<<-1<<endl; } else { long long co=0; while(sum) { co++; sum/=2; } cout<<co-1<<endl; } } return 0; }