1. 程式人生 > >An Easy Problem

An Easy Problem

include 一個 限制 enter size 時間 輸出 tdi eas

鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1223
時間限制: 1000 ms 內存限制: 65536 KB

【題目描述】

給定一個正整數N,求最小的、比N大的正整數M,使得M與N的二進制表示中有相同數目的1。

舉個例子,假如給定的N為78,其二進制表示為1001110,包含4個1,那麽最小的比N大的並且二進制表示中只包含4個1的數是83,其二進制是1010011,因此83就是答案。

【輸入】

輸入若幹行,每行一個數n(1<=n<=1000000),輸入"0"結束。

【輸出】

輸出若幹行對應的值。

【輸入樣例】

1
2
3
4
78
0

【輸出樣例】

2
4
5
8
83
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int bian(int n)
{
    int ans=0;
    while(n)
    {
        if(n%2)ans++;
        n/=2;
    }
    return ans;
}
int main()
{
    int n;
    while(cin>>n)
    {
        if(!n)break;
        
int t=bian(n); for(int i=n+1;;i++) { if(bian(i)==t) { cout<<i<<endl; break; } } } }

An Easy Problem