P10892 SDOI2024_A 题解
keep_shining · · 题解
赛时只过了这道题(我好菜),那就来水个题解吧。
思路:
首先如果
这样的话
另外,鉴于
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,t;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
int ans=0;
while(n)
{
if(n%2==0)n/=2;//n是2的倍数,直接除以2
else if(((n+1)/2)%2==1)ans++,n-=(n+1)/2;//判断(n-1)/2和(n+1)/2哪个是奇数
else ans++,n-=(n-1)/2;//n+1不行就肯定是n-1了
}
cout<<ans<<endl;
}
return 0;
}