数字排列 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

小明负责公司年会,想出一个趣味游戏:

屏幕给出 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. 首先,读取输入的四个数字,构建成一个集合。
  2. 判断集合中是否有非法数字,即数字小于1或大于9的情况,以及是否同时出现了2和5、6和9。
  3. 扩展集合,将2和5等价,将6和9等价。
  4. 根据集合中的数字,生成所有可能的组合数字,包括一位数和两位数。
  5. 将生成的所有数字进行排序。
  6. 返回排序后第n位的数字。

为什么组合数字,只包括一位数和两位数?

  1. n为输入数字中最大的数字, 因此最大值是 9
  2. 输入的数字是 4 个不重复的数字,因此组成的数字个数至少为:
    • 一位数: 至少有 4 个
    • 二位数: 至少有 12 个
  3. 因此, 一位和两位的组合数至少 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

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Turbo C++ v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)·跟老吕学C语言(C语言必学教程之一)

[TOC](Turbo C v3.7.8.9的下载和安装(C语言编辑器完整安装步骤详细图文教程)) 跟老吕学C语言&#xff08;C语言必学教程之一&#xff09; 老吕是通过 Turbo C 编译器开始了 C 编程培训和开发。 本文中&#xff0c;老吕将带你了解如何下载 Turbo C&#xff0c;如何在任何最新 W…

二.递归及实例(汉诺塔问题)

目录 5.递归 6-递归实例:汉诺塔问题 思路: 详细过程: 代码: 5.递归 调用自身 结束条件 6-递归实例:汉诺塔问题 思路: 结果: 详细过程: 代码: #n为盘子的个数 a,b,c分别为3个地方. def hannuta(n,a,b,c): ​if n>0:hannuta(n-1,a,c,b) #将n-1个从a经过c移到到b(a…

23.1 微服务理论基础

23.1 微服务基础 1. 微服务介绍2. 微服务特点3. 微服务优缺点4. 微服务两大门派5. 微服务拆分6. 微服务扩展6.1 服务扩展6.2 按需扩展7. 微服务重要模块******************************************************************************************************************

Qt之格栅布局(QGridLayout)控件填满整个单元格

Qt专栏&#xff1a;http://t.csdnimg.cn/GQN1M 目录 1.现象1 2.解决方案 3.现象2 4.解决方案 5.总结 1.现象1 今天在用QGridLayout布局的时候&#xff0c;添加到布局的QWidget有文本框、标签、组合框和按钮等等&#xff0c;布局两列&#xff0c;通过下面的方式添加进去的&…

气压计LPS25HB开发(1)----轮询获取气压计数据

气压计LPS25HB开发----1.轮询获取气压计数据 概述视频教学样品申请源码下载产品特性通信模式速率生成STM32CUBEMX串口配置IIC配置SA0地址设置串口重定向参考程序SA0设置模块地址获取ID复位操作BDU设置设置速率轮询读取数据演示 概述 本文将介绍如何使用 LPS25HB 传感器来读取数…

Ansible自动化运维Inventory与Ad-Hoc

前言 自动化运维是指利用自动化工具和技术来简化、自动化和优化IT基础设施的管理和运维过程&#xff0c;从而提高效率、降低成本&#xff0c;并减少人为错误。在当今复杂的IT环境中&#xff0c;自动化运维已经成为许多组织和企业提高生产力和保证系统稳定性的重要手段。Ansibl…

[数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5422 标注数量(xml文件个数)&#xff1a;5422 标注数量(txt文件个数)&#xff1a;5422 标注…

Docker简介与安装

简介 用来快速构建、运行、管理应用的工具简单说&#xff0c;帮助我们部署项目以及项目所依赖的各种组件典型的运维工具 安装 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \dock…

数字逻辑-时序逻辑电路二——沐雨先生

一、实验目的 &#xff08;1&#xff09;熟悉计数器的逻辑功能及特性。 &#xff08;2&#xff09;掌握计数器的应用。 &#xff08;3&#xff09;掌握时序逻辑电路的分析和设计方法。 二、实验仪器及材料 三、实验原理 1、集成4位计数器74LS161&#xff08;74LS160&#…

自动控制原理--matlab/simulink建模与仿真

第一讲 自动控制引论 第二讲 线性系统的数学模型 第三讲 控制系统的复域数学模型(传递函数) 第四讲 控制系统的方框图 /video/BV1L7411a7uL/?p35&spm_id_frompageDriver pandas, csv数据处理 numpy&#xff0c;多维数组的处理 Tensor&#xff0c;PyTorch张量 工作原理图…

数据仓库为什么要分层建设?每一层的作用是什么?

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。为了更好地管理和利用这些数据&#xff0c;许多企业都建立了数据仓库。然而&#xff0c;数据仓库并非简单的数据存储工具&#xff0c;而是一个复杂的数据处理和分析系统。其中&#xff0c;分层建设是数据仓库设计的重…

稀碎从零算法笔记Day17-LeetCode:有效的括号

题型&#xff1a;栈 链接&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;红字为笔者添加&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 …

SQLiteC/C++接口详细介绍之sqlite3类(六)

快速前往文章列表&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;五&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;七&#xff09; 19. sqlite3_changes与sqlite3_changes64 是SQLite中用…

【MyBatis-Plus】逻辑删除、乐观锁、防全表更新和删除实现 MyBatisX插件 高级扩展

文章目录 一、逻辑删除实现二、乐观锁实现2.1 悲观锁和乐观锁场景和介绍2.2 具体技术和方案:2.3 版本号乐观锁技术的实现流程2.4 使用mybatis-plus数据使用乐观锁 三、防全表更新和删除实现三、代码生成器(MyBatisX插件) 一、逻辑删除实现 物理删除&#xff1a;真实删除&#…

Flink on Yarn安装配置

前言 Apache Flink&#xff0c;作为一个开源的分布式处理引擎&#xff0c;近年来在大数据处理领域崭露头角&#xff0c;其独特的流处理和批处理一体化模型&#xff0c;使得它能够在处理无界和有界数据流时展现出卓越的性能。本文旨在对Flink进行简要的前言性介绍&#xff0c;以…

Oracle登录错误ERROR: ORA-01031: insufficient privileges解决办法

这个问题困扰了我三个星期&#xff0c;我在网上找的解决办法&#xff1a; 1.控制面板->管理工具->计算机管理->系统工具->本地用户和组->ORA_DBA组。 但我电脑上根本找不到。 2.在oracle安装目录下找到oradba.exe运行。 最开始我都不到这个oradba.exe文件在哪…

云计算 3月11号 (NFS远程共享存储及vsftpd配置)

构建NFS远程共享存储 一、NFS介绍 文件系统级别共享&#xff08;是NAS存储&#xff09; --------- 已经做好了格式化&#xff0c;可以直接用。 速度慢比如&#xff1a;nfs&#xff0c;sambaNFS NFS&#xff1a;Network File System 网络文件系统&#xff0c;NFS 和其他文件…

(008)Unity StateMachineBehaviour的坑

文章目录 StateMachineBehaviour同名函数的调用问题StateMachineBehaviour 的 OnState*、OnStateMachine* 的区别 StateMachineBehaviour同名函数的调用问题 1.如果脚本中&#xff0c;两个同名的函数都存在&#xff0c;那么两个函数都会被调用&#xff1b;如果只有其中一个同名…

Maven3.6.3安装与配置,IDEA2022.2.3部署Maven操作步骤

1、先确保安装了Java开发环境&#xff0c;并配置了JAVA_HOME环境变量 WinR ,输入cmd,然后输入命令echo %JAVA_HOME%,查看JDK &#xff0c;接着输入java -version,查看java的版本号 接着系统变量中&#xff0c;配置JAVA_HOME环境变量 2、官网下载MAVEN3.6.3&#xff0c;Maven3.…

3.14

racial a. 种族的 radiation n. 放射&#xff0c;放射物 railway n. 铁路&#xff1b;铁道 rainbow n. 虹&#xff0c;彩虹 raise vt. 使升高; 饲养 random a. 随意的 rank n. 职衔&#xff0c;军衔 rare a. 罕见的&#xff0c;稀有的 rat n. 老鼠 rate n./ v. 率&#xff0c;评…