数字排列 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 200分
题解: Java / Python / C++

题目描述
小明负责公司年会,想出一个趣味游戏:
屏幕给出 1−9 中任意 4 个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第 n 位置的数字,其中 n 为给出数字中最大的(如果不到这么多数字则给出最后一个即可).
注意:
- 2 可以当作 5 来使用,5 也可以当作 2 来使用进行数字拼接,且屏幕不能同时给出 2 和 5;
- 6 可以当作 9 来使用,9 也可以当作 6 来使用进行数字拼接,且屏幕不能同时给出 6 和 9。
给出的数字:1, 4, 8, 7 则可以拼接的数字为:
1, 4, 7, 8, 14, 17, 18, 41, 47, 48, 71, 74, 78, 81, 84, 87, 147, 148, 178…(省略后面的数字) 因此,第 n(即8)个数字为 41。
输入描述
输入以逗号分隔的 4 个 int 类型整数的字符串。
输出描述
输出为这几个数字可拼成的数字从小大大排列位于第 n (n为输入数字中最大的数字) 位置的数字,如果输入的数字不在范围内或者有重复,则输出 −1。
示例1
输入:
1,4,8,7输出:
41说明:
可以构成的数字按从小到大排序为:
1, 4, 7, 8, 14,17,18,41,47, 48, 71, 74, 78, 81, 84, 87, 147, 148,178...(省略后面的数字)故第 8 个数字为 41。
示例2
输入:
2,5,1,4输出:
-1说明:
2 和 5 不能同时出现。
示例3
输入:
3,0,9,1输出:
-1说明:
0 不在 1 到 9 的范围内。
示例4
输入:
3,9,7,8输出:
39说明:
注意 9 可以当 6 使用,所以可以构成的数字按从小到大排序为:
3, 6, 7, 8, 9, 36, 37, 38, 39, 63, 67, 68, 73, 76, 78, 79, 83 .... (省略后面的数字),故第9个为 39
题解
这道题目是一道组合数字的问题,需要根据给定的数字组合出所有可能的数字,然后进行排序,最后找到第n位的数字。
解题思路如下:
- 首先,读取输入的四个数字,构建成一个集合。
- 判断集合中是否有非法数字,即数字小于1或大于9的情况,以及是否同时出现了2和5、6和9。
- 扩展集合,将2和5等价,将6和9等价。
- 根据集合中的数字,生成所有可能的组合数字,包括一位数和两位数。
- 将生成的所有数字进行排序。
- 返回排序后第n位的数字。
为什么组合数字,只包括一位数和两位数?
n为输入数字中最大的数字, 因此最大值是 9- 输入的数字是 4 个不重复的数字,因此组成的数字个数至少为:
- 一位数: 至少有 4 个
- 二位数: 至少有 12 个
- 因此, 一位和两位的组合数至少 16 个, 答案拼成的数字从小大大排列位于第
n个数肯定就包含在里面。
Java
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);Set<Integer> s = new HashSet<>();String[] inputArr = in.nextLine().split(",");for (String str : inputArr) {s.add(Integer.parseInt(str.trim()));}int result = solve(s);System.out.println(result);}public static int solve(Set<Integer> s) {int m = Integer.MAX_VALUE, mx = Integer.MIN_VALUE;for (int num : s) {m = Math.min(m, num); // 获取最小值mx = Math.max(mx, num); // 获取最大值}if (m < 1 || mx > 9) { // 存在非法的数字return -1;}// 不能同时出现if ((s.contains(2) && s.contains(5)) || (s.contains(6) && s.contains(9))) {return -1;}int n = mx; // n为输入数字中最大的数字// 为了方便组合数字,则需将可以等同的数字也加入进去if (s.contains(2) || s.contains(5)) {s.add(2);s.add(5);}if (s.contains(6) || s.contains(9)) {s.add(6);s.add(9);}// 拼接的数字Set<Integer> collect = new HashSet<>(s); // 一位数// 二位数的组合for (int x : s) {for (int y : s) {// 每个数字只能使用一次if (x != y && x * y != 2 * 5 && x * y != 6 * 9) {collect.add(x * 10 + y);}}}// 对组成的数字排序,然后返回第 n 位的数字Integer[] sortedArray = collect.toArray(new Integer[0]);Arrays.sort(sortedArray);return sortedArray[n - 1];}
}
Python
def solve(s) -> int:m, mx = min(s), max(s)if m < 1 or mx > 9: # 存在非法的数字return -1# 不能同时出现if (2 in s and 5 in s) or (6 in s and 9 in s):return -1# n为输入数字中最大的数字n = mx# 为了方便组合数字,则需将可以等同的数字也加入进去if (2 in s or 5 in s):s.add(2)s.add(5)if (6 in s or 9 in s):s.add(6)s.add(9)# 拼接的数字collect = set(s) # 一位数# 二位数的组合for x in s:for y in s:# 每个数字只能使用一次if x != y and x * y != 2 * 5 and x * y != 6 * 9:collect.add(x * 10 + y)# 对组成的数字排序,然后返回第 n 位的数字sorted_array = sorted(list(collect))return sorted_array[n - 1]if __name__ == "__main__":arr = set(map(int, input().split(",")))print(solve(arr))
C++
#include <bits/stdc++.h>
using namespace std;int solve(set<int>& s)
{int m = *s.begin(), mx = *(--s.end());if (m < 1 || mx > 9) { // 存在非法的数字return -1;}// 不能同时出现if ((s.find(2) != s.end() && s.find(5) != s.end()) || (s.find(6) != s.end() && s.find(9) != s.end())) {return -1;}int n = mx; // n为输入数字中最大的数字// 为了方便组合数字,则需将可以等同的数字也加入进去if (s.find(2) != s.end() || s.find(5) != s.end()) {s.insert(2);s.insert(5);}if (s.find(6) != s.end() || s.find(9) != s.end()) {s.insert(6);s.insert(9);}// 拼接的数字set<int> collect(s); // 一位数// 二位数的组合for (auto x : s) {for (auto y : s) {// 每个数字只能使用一次if (x != y && x * y != 2 * 5 && x * y != 6 * 9) {collect.insert(x * 10 + y);}}}// 对组成的数字排序,然后返回第 n 位的数字vector<int> sorted_array(collect.begin(), collect.end());sort(sorted_array.begin(), sorted_array.end());return sorted_array[n - 1];
}int main()
{set<int> s;for (int i = 0, x; i < 4; i++) {cin >> x;s.insert(x);if (cin.peek() == ',') cin.ignore();}cout << solve(s) << endl;return 0;
}
❤️有考友通过专栏已经快速通过机考,都是原题哦~~ 💪
📝 订阅 http://t.csdnimg.cn/lifXk
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏
相关文章:
数字排列 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 小明负责公司年会,想出一个趣味游戏: 屏幕给出 1−9 中任意 4 个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第 n 位置…...
yocto 编译raspberrypi 4B并启动
yocto 编译raspberrypi 4B并启动 环境准备 最近到手一个树莓派4B,准备拿来玩一玩,下面记录下使用yocto构建RaspberryPi的镜像并刷写启动的过程。 首先准备主机编译环境,必要组件安装: sudo apt install gawk wget git diffstat…...
Nginx、LVS、HAProxy工作原理和负载均衡架构
当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。 在实际应用…...
C语言标准库函数qsort( )——数据排序
大家好!我是保护小周ღ,本期为大家带来的是深度解剖C语言标准库函数 qsort(),qsort()函数他可以对任意类型的数据排序,博主会详细解释函数使用方法,以及使用快速排序的左右指针法模拟实现函数功能,这样的排…...
基础---nginx 启动不了,跟 Apache2 服务冲突
文章目录 查看 nginx 服务状态nginx 启动后 访问页面 127.0.0.1停止 nginx 服务,访问不了页面停止/启动 Apache2 服务,启动 Apache2 页面访问显示正确nginx 莫名启动不了卸载 Apache2 服务器 启动 nginx ,但是总是不能实现反向代理࿰…...
如何利用百度SEO优化技巧将排到首页
拥有一个成功的网站对于企业和个人来说是至关重要的,在当今数字化的时代。在互联网上获得高流量和优质的访问者可能并不是一件容易的事情,然而。一个成功的SEO战略可以帮助你实现这一目标。需要一些特定的技巧和策略、但要在百度搜索引擎中获得较高排名。…...
CSS隐藏元素的方法 ( 5 种)
还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…...
微信小程序(五十九)使用鉴权组件时原页面js自动加载解决方法(24/3/14)
注释很详细,直接上代码 上一篇 新增内容: 1.使用覆盖函数的方法阻止原页面的自动执行方法 2.使用判断实现只有当未登录时才进行方法覆盖 源码: app.json {"pages": ["pages/index/index","pages/logs/logs"],…...
Git 学习笔记 三个区域、文件状态、分支、常用命令
Git 学习 GitGit概念VS Code中使用仓库(repository)示例 Git 使用时的三个区域示例 Git 文件状态示例 Git 暂存区示例 Git 回退版本删除文件忽略文件示例 分支分支的使用分支的合并与删除分支的合并冲突 Git常用命令Git远程仓库 (HTTP)步骤远程仓库 克隆…...
OrangePiLinux连接小米手机使用adb显示“List of devices attached”的问题解决
参考文章adb连接不上手机,提示“List of devices attached” - 简书 (jianshu.com) adb解决报错error: no devices/emulators found error: cannot connect to daemon_adb.exe: no devices/emulators found-CSDN博客 error: no devices/emulators found解决办法-C…...
【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】
错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…...
3.1_9 基本分段存储管理
文章目录 3.1_9 基本分段存储管理(一)分段(二)段表(三)地址变换(四)分段、分页管理的对比 总结 3.1_9 基本分段存储管理 (一)分段 进程的地址空间:…...
基于SpringBoot+Druid实现多数据源:baomidou多数据源
前言 本博客姊妹篇 基于SpringBootDruid实现多数据源:原生注解式基于SpringBootDruid实现多数据源:注解编程式基于SpringBootDruid实现多数据源:baomidou多数据源 一、功能描述 支持 数据源分组 ,适用于多种场景 纯粹多库 读写…...
Redis开发规范与性能优化(二)
开发规范与性能优化 3.客户端使用 1.【推荐】避免多个应用使用一个Redis示例 正例:不相干的业务拆分,公共数据库做服务化 2.【推荐】使用带有连接池的数据库,可以有效控制链接,同时提高效率,标准使用方式如代码所示 public c…...
我们是否生活在一个超大型生物的大脑之中?——对多元宇宙观与生命存在形式的哲学探讨
随着科技和哲学思辨的深入,关于人类所处宇宙的本质及我们自身存在的真实性的讨论越发引人入胜。其中一种颇具科幻色彩的观点认为,我们可能生活在某个巨大生物的大脑之中,所有的物理规律、自然现象以及我们的感知体验,都可能是这个…...
【Python数据结构与判断7/7】数据结构小结
目录 序言 整体回忆 定义方式 访问元素 访问单个元素 访问多个与元素 修改元素 添加元素 列表里添加元素 字典里添加元素 删除元素 in运算符 实战案例 总结 序言 今天将对前面学过的三种数据结构:元组(tuple)、列表(…...
探讨:MySQL和PostgreSQL谁更火
一、有人说PostgreSQL比MySQL火🔥 PostgreSQL相比于MySQL越来越受欢迎的原因可以从以下几个方面来阐述: 许可协议灵活性: PostgreSQL采用的是较为宽松的BSD许可证,允许企业在开源的基础上自由使用、修改和分发,而无需…...
hbase和es的选取 hbase与es结合
hbase和es的选取 hbase与es结合 背景介绍 HBase与ElasticSearch是现代应用在处理海量数据的技术架构会经常被使用的两款产品,其中HBase是一个分布式KV系统,具有灵活Schema、水平扩展、低成本、高并发的优势,但在复杂查询、分析能力方面相对…...
GoLang:云原生时代致力于构建高性能服务器的后端语言
Go语言的介绍 概念 Golang(也被称为Go)是一种编程语言,由Google于2007年开始设计和开发,并于2009年首次公开发布。Golang是一种静态类型、编译型的语言,旨在提供高效和可靠的软件开发体验。它具有简洁的语法、高效的编…...
高频面试必备(Java研发岗),一线互联网架构师设计思想解读开源框架
BeanFactory 和 ApplicationContext 有什么区别? 如何用基于 XML 配置的方式配置 Spring? 如何用基于 Java 配置的方式配置 Spring? 请解释 Spring Bean 的生命周期? Tomcat Tomcat 的缺省端口是多少,怎么修改&…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
一、研究背景与创新点 (一)现有方法的局限性 当前智驾系统面临两大核心挑战:一是长尾问题,即系统在遇到新场景时可能失效,例如突发交通状况或非常规道路环境;二是可解释性问题,传统方法无法解释智驾系统的决策过程,用户难以理解车辆行为的依据。传统语言模型(如 BERT…...
