- 高镜铠 的博客
7.15
- @ 2024-7-15 20:35:45
TP1 小田不想打怪兽
思路: 其实这一题解决每一只怪兽实际上是解决他分裂后的两只小怪兽的次数之和+1,那两只小怪兽再分裂、再分裂、再分裂、再分裂……直到等于1再停止,但在实际的代码中没有这么麻烦,只要在每一次递归之中分裂一次再加1,等到所有的小怪兽都等于0就行了,也就是:
f(i)=f(i/2)×2+1 代码:
int f(long long n)
{
if(n==1) return 1;
return f(n/2)*2+1;
}
样例: 输入:
5
输出:
7
第一次,变为:[2,2]。
第二次,变为:[1,1,2]。
第三次,变为 [1,2]。
第四次,变为 [2]。
第五次,变为 [1,1]。
第六次,变为 [1]。
第七次,全部消灭。