题目:
你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。
在一次行动中,你可以做下述两种操作之一:
1. 递增,将当前整数的值加 1(即, x = x + 1)。
2. 加倍,使当前整数的值翻倍(即,x = 2 * x)。
求从 1 开始得到 2022 需要的最少行动次数。
(注意 : 在整个游戏过程中,你可以使用 递增 和 加倍 操作任意次数。)
分析:
逆向考虑,如果是偶数,优先除以2;如果是奇数,减1。
答案:
#include <stdio.h>
int 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;
}