zoukankan      html  css  js  c++  java
  • 待修改 nyoj 412 又是一个遗留问题

    测试的数据都正确啊,跟别人正确代码也对比了一下,一直wrong ans,这道题是搞不定了,思路是这样的,一个int 的数,

    例如 一个数的二进制是1001100,那么大于这个数的最小的有相同个数1的数是都少?

    我的思路是这样:既然最小那么我就每次加一试试:,然后判断1个数是否相同,以上个数为例。

    10011_01 10011_10 10011_11    到此为止,1的个数一直在增加

    添加多少1呢? 添加在哪里呢?

    10100—00 中1的位置,到 1001100中1的位置。为   5-3-1=1;

    所以加一个1,最小当然添加在最后一位了。如果是2呢,则添加在最后两位。总之添加在最低位,

    1010001

    不细说了,同学们可以不断的加一观察很快就发现了。

    ps:   x&-x表示最低位1的权值,具体讨论可以做一下树状数组。

    #include<iostream>
    #include<math.h>
    //x&-x 为x的二进制中最低位1的权值 列: 110010为 2  11100为4 ,所以 log2(4)表示最低位1在第2位
    using namespace std;
    int lowbit(int n)
    {
        return log(n&-n)/log(2);
    
    }
    int main()
    {
        int n;
        while(cin>>n)
        {
            int pos1=lowbit(n);
            
            int n2=lowbit(n+n&-n);
            //cout<<"hello"<<pos1<<n2<<endl;
            int ne=n+(n&-n);
            
            int count=n2-pos1-1;
            int a=1;
            for(int i=0;i<count;i++)
            {
                ne+=a;
                a=a<<1;
            
            }
            cout<<ne<<endl;
        
        }
        
    
    
    return 0;
    }
  • 相关阅读:
    Head first javascript(七)
    Python Fundamental for Django
    Head first javascript(六)
    Head first javascript(五)
    Head first javascript(四)
    Head first javascript(三)
    Head first javascript(二)
    Head first javascript(一)
    Sicily 1090. Highways 解题报告
    Python GUI programming(tkinter)
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3804856.html
Copyright © 2011-2022 走看看