• 一本通 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;
    		}
    	}
    }
    
  • 相关阅读:
    centos7修改网卡名称
    xtrabackup备份恢复过程
    centos 设置删除提示
    cetos6 安装samba共享文件夹
    centos 安装cacti监控
    centos6 搭建hdwiki
    centos6.8安装superctl 后台管理工具
    centos6.5 安装ansible,管理多台服务器
    CreateParams作用及重写
    c# 获取当前应用程序的路径
  • 原文地址:https://www.cnblogs.com/loceaner/p/10767349.html
Copyright © 2020-2023  润新知