日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通(1223:An Easy Problem)

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。