题目大意:Alex喜欢折纸,将一张 W * H 的纸折成 w * h 的纸片,问最少需要折几次。
由样例也可以看出,最小次数的情况就是对折除以二的情况。只要一直让纸片的长度和宽度分别除以二,然后计算除以二的次数即可。
附上AC代码:
#include<bits/stdc++.h>
using namespace std;
int judge(int X,int x)
{
int num=0;
while(X>x)
{
if(X%2) X++;
X/=2;
num++;
}
return num;
}
int main()
{
int A,B,a,b;
freopen("folding.in","r",stdin);
freopen("folding.out","w",stdout);
cin>>A>>B>>a>>b;
if(max(A,B)<max(a,b))
{
cout<<-1<<endl;
return 0;
}
int sum1=judge(A,a);
int sum2=judge(B,b);
int sum=sum1+sum2;
sum1=judge(A,b);
sum2=judge(B,a);
sum=min(sum,sum1+sum2);
cout<<sum<<endl;
return 0;
}