C-消减整数
消减整数
https://ac.nowcoder.com/acm/contest/11163/C
C-消减整数
解题思路: 从1开始减(设i为1),后面只能减 i 或者2* i,也就是说只能减2的倍数,那么如果一开始n为双数就得减两次i=1(题目要求第一次必须减1,为了确保n能到0所以需要保证n是双数),否则减一次。确保n为双数以后开始循环,如果能被i的两倍整除,那么就i* 2,否则就减自身i不变。用num作为计数器就好了。
#include<iostream>
#include<math.h>
typedef long long ll;
using namespace std;
int main()
{
ll t,n,i,num;
cin>>t;
while(t--)
{
num=0,i=1;
cin>>n;
if(n%2==0)//如果开局是双数
{
num+=2;
n-=2;//保证n是双数
}
else//如果是单数
{
num+=1;
n-=1;//保证n是双数
}
while(n)//开始循环n
{
if(n%(i*2)==0)//如果能被i*2整除
{
i*=2;
n-=i;
num++;
}
else//否则
{
n-=i;
num++;
}
}
cout<<num<<endl;
}
return 0;
}
顺丰集团工作强度 276人发布