信息学奥赛一本通(1223:An Easy Problem)
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通(1223:An Easy Problem)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1223:An Easy Problem
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 5835 ??? 通過數: 4111
【題目描述】
給定一個正整數N,求最小的、比N大的正整數M,使得M與N的二進制表示中有相同數目的1。
舉個例子,假如給定的NN為78,其二進制表示為1001110,包含4個1,那么最小的比N大的并且二進制表示中只包含4個1的數是83,其二進制是1010011,因此83就是答案。
【輸入】
輸入若干行,每行一個數nn(1≤n≤1000000),輸入"0"結束。
【輸出】
輸出若干行對應的值。
【輸入樣例】
1 2 3 4 78 0【輸出樣例】
2 4 5 8 83【分析】
? ? ? ? 這道題放置在貪心算法專題有些牽強。從輸入的n入手,先統計n的二進制中有多少個1,用ones函數實現,然后,在當前n的基礎上自增,找到和n相同二進制數1的數即可。
【參考代碼】
#include <stdio.h> #define N 10010 int ones(int n) //n中2進制1的個數 {int cnt=0;while(n>0){if(n%2==1)cnt++;n/=2;}return cnt; } int main() {int n,m,cnt;while(scanf("%d",&n) && n){cnt=ones(n);while(1){n++; //在此基礎上,找二進制中1個數相同的數if(ones(n)==cnt)break;}printf("%d\n",n);}return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1223
總結
以上是生活随笔為你收集整理的信息学奥赛一本通(1223:An Easy Problem)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1210:因子分解)
- 下一篇: 信息奥赛一本通(1839:【05NOIP