Problem C

心已赠人 2022-06-13 20:59 240阅读 0赞

Problem C

Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 167 Accepted Submission(s) : 64

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

给定一个正整数N,求最小的、比N的的正整数M,使得M与N的二进制表示中M含有的1比N含有的1多1个。如给定N为78,其二进制表示为1001110,包含4个1,那么最小的比N大的且二进制包括5个1的数是79,其二进制是1001111。

Input

输入一个正整数N(1<=n<=100000).有多个测试用例。

Output

输出对应的M数。

Sample Input

  1. 1

Sample Output

3

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. #include<cstring>
  5. using namespace std;
  6. int A(int x)
  7. {
  8. int s=0;
  9. while(x)
  10. {
  11. if(x%2==1)
  12. s++;
  13. x/=2;
  14. }
  15. return s;
  16. }
  17. int main()
  18. {
  19. int n,m;
  20. while(~scanf("%d",&n))
  21. {
  22. int y=A(n);
  23. for(int i=n;;i++)
  24. {
  25. if(A(i)>y)
  26. {
  27. printf("%d\n",i);
  28. break;
  29. }
  30. }
  31. }
  32. return 0;
  33. }

发表评论

表情:
评论列表 (有 0 条评论,240人围观)

还没有评论,来说两句吧...

相关阅读