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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:16
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务