一本通1223时间超限

img

img

#include 
using namespace std;
int f(int n) {
    int cnt = 0;
    while (n > 0) {
        if (n % 2 == 1) cnt++;
        n /= 2;
    }
    return cnt;
}
int main() {
    int n, cnt;
    while (scanf("%d", &n) && n) {
        cnt = f(n);
        while (true) {
            n++;
            if (f(n) == cnt) break;
        }
        printf("%d\n",n);
    }
    return 0;
}

提交后时间超限86分,是什么原因?(这个网站代码前面加O2提交等于没加)

保证AC:

img

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 999999999
#define N 1001
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF&&n)
    {
        int cnt=0;
        int temp=n;
        while(temp>0)
        {
            if(temp%2)
                cnt++;
            temp/=2;
        }
        int sum=0;
        while(1)
        {
            temp=++n;
            while(temp>0)
            {
                if(temp%2)
                    sum++;
                temp/=2;
            }
            if(cnt==sum)
            {
                cout<<n<<endl;
                break;
            }
            sum=0;
        }
    }
    return 0;
}
int main()
{
        int n;
        cin >> n;
        int i = 0;
        int nz = 0;
        int no = 0;
        bool bo=false;
        bool bz=false;
        for (i = 0; i < 32; i++) {
                if(n&(1<<i))
                        no++;
                if (n & (1 << i)&&!bo) {
                        bo=true;
                }
                if (((n & (1 << i)) == 0) && bo) {
                        nz=i;
                        break;
                }
        }
        auto x=(0xffffffff<<nz);
        n=n&x;
        n=n|(1<<nz);
        for (int i = 0; i < no-1; i++) {
                n=(n|1<<i);
        }
        cout<<n;
}


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 999999999
#define N 1001
using namespace std;
int main() {
    int n;
    while(scanf("%d",&n)!=EOF&&n) {
        int asd=0;
        int temp=n;
        while(temp>0) {
            if(temp&1)
                asd++;
            temp>>=1;
        }
        int sum=0;
        while(1) {
            temp=++n;
            while(temp>0) {
                if(temp&1)
                    sum++;
                temp>>=1;
            }
            if(asd==sum) {
                cout<<n<<endl;
                break;
            }
            sum=0;
        }
    }
}