你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。
在一次行动中,你可以做下述两种操作之一:
1. 递增,将当前整数的值加 1(即, x = x + 1)。
2. 加倍,使当前整数的值翻倍(即,x = 2 * x)。
求从 1 开始得到 2022 需要的最少行动次数。
(注意 : 在整个游戏过程中,你可以使用 递增 和 加倍 操作任意次数。)
分析:逆向考虑,如果是偶数,优先除以2;如果是奇数,减1。
答案:#includeint xingdong(int target) { if(target%2==0) { target/=2; return target; } if(target%2==1) { target-=1; return target; } } int main() { int target,count=0; scanf("%d",&target); while(target>1) { target=xingdong(target); count++; } printf("%d",count); return 0; }



