首页 > 编程语言 >2024年华为OD机试真题- 找数字-(C++/Java/python)-OD统一考试(C卷D卷)

2024年华为OD机试真题- 找数字-(C++/Java/python)-OD统一考试(C卷D卷)

时间:2024-07-04 18:00:10浏览次数:17  
标签:11 01 Java 真题 二进制 OD 个数 int str

2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】    

题目描述

小扇和小船今天又玩起来了数字游戏,

小船给小扇一个正整数 n(1 ≤ n ≤ 1e9),小扇需要找到一个比 n 大的数字 m,使得 m 和 n 对应的二进制中 1 的个数要相同,如:

  • 4对应二进制100
  • 8对应二进制1000
  • 其中1的个数都为1个

现在求 m 的最小值。

输入描述

输入一个正整数 n(1 ≤ n ≤ 1e9)

输出描述

输出一个正整数 m

用例1

输入

2

输出

4

说明

2的二进制10,

4的二进制位100,

1的个数相同,且4是满足条件的最小数

用例2

输入

7

输出

11

说明

7的二进制111,

11的二进制位1011,

1的个数相同,且11是满足条件的最小数

用例3

输入

6

输出

9

说明

6的二进制0110,

9的二进制位1001,

1的个数相同,且11是满足条件的最小数

解题思路

本题可以通过把十进制数转化成二进制,然后移动1的位置来得到1个数不变,但更小的数。比如:

1000001

1000010

11101

11110

即只需要把最右边开始查到的第一对01变为10即可。

如果没有01的情况如何处理,比如1000,1111,只需要前面加个0,依然可以用前面的方法解答,

01000

10000

01111

10111

但还有一些特殊情况,上述方法不能解决,比如1001111000

1001111000

1010111000  //按照上述方法的答案

1010000111  //实际的正确答案

即01右边存在1时,需要把1全移到最右边。

考点

逻辑分析

代码

c++
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n,ans=0;
    cin>>n;
    string str;
    while(n>0) {
        int res=n%2;
        str=to_string(res)+str;
        n=n/2;
    }
    str="0"+str; //十进制转成二进制字符串
    int onecnt=0; // 记录01右边1的个数
    int len=str.size();
    // 从最右边开始查找
    for(int i=len-

标签:11,01,Java,真题,二进制,OD,个数,int,str
From: https://blog.csdn.net/dijkstra2023/article/details/140185918

相关文章

  • Xcode 16 beta 2 (16A5171r) 下载 - Apple 平台 IDE
    Xcode16beta2(16A5171r)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgXcode16的新功能使用预测代码补全功能和更快的预览功能,将奇思......
  • 10分钟带你看完Java架构设计演变
    原文:https://mp.weixin.qq.com/s/LAY8JEn4FJaL06lJtRt4ag关于Java架构方面的面试经常都会被问到,“千万、上亿级别的流量应该我们应该怎么处理”,我之前面试的时候也被问过几次,还被问过以下问题:现在面对业务急剧增长你会怎么处理?业务量突然增长100倍、1000倍怎么处理?怎么来处理......
  • [NodeJS] NodeJS事件循环
    JS是单线程的,如果出现阻塞会严重影响代码执行效率。NodeJS通过事件循环,尽可能地将耗时任务委派给系统内核来实现非阻塞IO。NodeJS提供了许多和异步相关的API,除了语言标准规定的setTimeout和setInterval,还有setImmediate和process.nextTick。经常和这几个出现在面试题里的还有Pr......
  • k8s实战 ---- pod 基础
    如果你对k8s还不了解,可以看下前文k8s实战1----初识    (https://www.cnblogs.com/jilodream/p/18245222)什么是pod,pod在英文中是豌豆荚、分离仓、集装箱的意思。在k8s中,pod就是融合一堆容器实例的一个大容器(称之为集合更贴切)。K8s所能部署的最小单元就是容器,就是pod,一......
  • “Java多线程编程:从Thread到Runnable再到Callable的深入探索“
    1什么是进程?通俗地解释为:计算机中正在执行的一个程序实例。进程它是系统分配资源的基本单位。想象一下,你的电脑就像是一个大工厂,而每一个进程就像是这个工厂里的一条生产线或者一个工作小组,它们各自独立地运行着不同的任务,但同时又受到整个工厂(即操作系统)的管理和调度。......
  • java编译时出现错误[ERROR] 不再支持源选项 5。请使用 6 或更高版本。[ERROR] 不再支
    当我引入一个新项目在控制台输入命令mvn  clean install -U,报错出现原因是我们下载了多个java版本,我的电脑上就有1.8和11两个版本,此时只需在引入的pom文件中指定具体的版本即可<maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</mave......
  • [University CodeSprint 4] Drawing Rectangles (扫描线 + 最小点覆盖)
    [UniversityCodeSprint4]DrawingRectangles扫描线+最小点覆盖题目的形式一看就是扫描线,观察到矩形的并面积\(\le3\times10^5\),所以可以直接把这些位置找出来。这部分的复杂度是\(O(n\logn)\)。然后剩下的部分就是一个经典的最小点覆盖问题。具体的说,构造二分图,左边代......
  • Java实现简单的冒泡排序
    Java实现简单的冒泡排序核心思想:把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换。(小到大排序)例如有数组{3,1,5,7,4,2}第一次排序{3,1,5,7,4,2}//开始{1,3,5,7,4,2}//1和3互换{1,3,5,7,4,2......
  • 深入探索Java IO与NIO:差异与高性能网络编程的应用
    深入探索JavaIO与NIO:差异与高性能网络编程的应用一、引言在Java中,I/O(Input/Output)操作是应用程序与外部世界交互的基本方式。Java标准库提供了多种I/O模型,其中最常用的有传统的I/O(即阻塞I/O)和新引入的NIO(Non-blockingI/O,非阻塞I/O)。随着网络应用的日益复杂和性能要求的......
  • c++ 之连接sqlite数据库(vsode)
    Tasks.json中添加配置"-lsqlite3"#include<sqlite3.h>#include<iostream>#include<errno.h>staticintcallback1(void*NotUsed,intargc,char**argv,char**azColName){inti;for(i=0;i<argc;i++){printf("%s=%s\n&quo......