An Easy Problem
阿新 • • 發佈:2017-11-19
include 一個 限制 enter size 時間 輸出 tdi eas
時間限制: 1000 ms 內存限制: 65536 KB
鏈接: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