zoukankan      html  css  js  c++  java
  • 一本通 1223:An Easy Problem

    一本通 1223:An Easy Problem

    $$传送门qwq$$


    【题目描述】

    给定一个正整数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


    【思路】

    并不知道为什么这样一道题要放在贪心算法里......

    简简单单的一道题,我竟然想思路想了10分钟,实在是太蒻了......

    用位运算统计出输入的数二进制形式下1的个数,然后用while循环慢慢找出和它二进制1个数一样的数就好了


    【代码】

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #define INF 999999999
    #define N 1001
    using namespace std;
    int main() {
    	int n;
    	while(scanf("%d",&n)!=EOF&&n) {
    		int asd=0;
    		int temp=n;
    		while(temp>0) {
    			if(temp&1)
    				asd++;
    			temp>>=1;
    		}
    		int sum=0;
    		while(1) {
    			temp=++n;
    			while(temp>0) {
    				if(temp&1)
    					sum++;
    				temp>>=1;
    			}
    			if(asd==sum) {
    				cout<<n<<endl;
    				break;
    			}
    			sum=0;
    		}
    	}
    }
    
  • 相关阅读:
    vc生产垃圾清理
    完整的.h宏定义
    vs 2017 boost 安装目录 非安装
    cdlinux
    TryEnterCriticalSection
    go get 升级所有
    delphi win7 and high path
    本机激活Qemu网络配置 之桥接 win 10 2019 LTSC
    archlinux alsa安装,音量设置和音量信息保存
    windows搭建gcc开发环境(msys2) objdump
  • 原文地址:https://www.cnblogs.com/loceaner/p/10767349.html
Copyright © 2011-2022 走看看