【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1086

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🍰 数字排列游戏
    • 问题描述
    • 输入格式
    • 输出格式
    • 样例输入
      • 样例一
      • 样例二
      • 样例三
      • 样例四
    • 样例输出
      • 样例一
      • 样例二
      • 样例三
      • 样例四
    • 样例解释
      • 样例一
      • 样例二
      • 样例三
      • 样例四
    • 数据范围
    • 题解
    • 参考代码

🍰 数字排列游戏

问题描述

K 小姐负责公司年会,想出一个趣味游戏:屏幕给出 1 − 9 1-9 19 中任意 4 4 4 个不重复的数字,大家需要以最快时间给出这几个数字可拼成的数字从小到大排列位于第 n n n 位置的数字,其中 n n n 为给出数字中最大的。如果不到这么多数字则给出最后一个即可。

注意:

  • 2 2 2 可以当作 5 5 5 来使用, 5 5 5 也可以当作 2 2 2 来使用进行数字拼接,且屏幕不能同时给出 2 2 2 5 5 5
  • 6 6 6 可以当作 9 9 9 来使用, 9 9 9 也可以当作 6 6 6 来使用进行数字拼接,且屏幕不能同时给出 6 6 6 9 9 9

例如,给出的数字: 1 1 1, 4 4 4, 8 8 8, 7 7 7 则可以拼接的数字为: 1 1 1, 4 4 4, 7 7 7, 8 8 8, 14 14 14, 17 17 17, 18 18 18, 41 41 41, 47 47 47, 48 48 48, 71 71 71, 74 74 74, 78 78 78, 81 81 81, 84 84 84, 87 87 87, 147 147 147, 148 148 148, 178 178 178…(省略后面的数字)。因此,第 n n n(即 8 8 8)个数字为 41 41 41

输入格式

输入以逗号分隔的 4 4 4 i n t int int 类型整数的字符串。

输出格式

输出为这几个数字可拼成的数字从小到大排列位于第 n n n n n n 为输入数字中最大的数字)位置的数字。如果输入的数字不在范围内或者有重复,则输出 − 1 -1 1

样例输入

样例一

1,4,8,7

样例二

2,5,1,4

样例三

3,0,9,1

样例四

3,9,7,8

样例输出

样例一

41

样例二

-1

样例三

-1

样例四

39

样例解释

样例一

可以构成的数字按从小到大排序为: 1 1 1, 4 4 4, 7 7 7, 8 8 8, 14 14 14, 17 17 17, 18 18 18, 41 41 41, 47 47 47, 48 48 48, 71 71 71, 74 74 74, 78 78 78, 81 81 81, 84 84 84, 87 87 87, 147 147 147, 148 148 148, 178 178 178…(省略后面的数字),故第 8 8 8 个数字为 41 41 41

样例二

2 2 2 5 5 5 不能同时出现。

样例三

0 0 0 不在 1 1 1 9 9 9 的范围内。

样例四

注意 9 9 9 可以当 6 6 6 使用,所以可以构成的数字按从小到大排序为: 3 3 3, 6 6 6, 7 7 7, 8 8 8, 9 9 9, 36 36 36, 37 37 37, 38 38 38, 39 39 39, 63 63 63, 67 67 67, 68 68 68, 73 73 73, 76 76 76, 78 78 78, 79 79 79, 83 83 83 … (省略后面的数字),故第 9 9 9 个为 39 39 39

数据范围

输入的数字范围为 1 − 9 1-9 19,且不重复。

题解

这道题的关键在于处理数字的排列组合,并且考虑到 2 2 2 5 5 5 以及 6 6 6 9 9 9 的互换使用。我们需要生成所有可能的数字组合,然后进行排序,最后根据最大数字的位置输出相应的结果。

参考代码

  • Python
def main():
    import sys
    input = sys.stdin.read
    w = list(map(int, input().strip().split(',')))
    w.sort()
    st = set(w)
    k = max(w)
    dic = {2: 5, 5: 2, 6: 9, 9: 6}
    vis = [False] * 4
    res = []

    def dfs(u, num, cnt):
        if u == cnt:
            res.append(num)
            return
        for i in range(4):
            if vis[i]:
                continue
            vis[i] = True
            dfs(u + 1, num * 10 + w[i], cnt)
            if w[i] in dic:
                dfs(u + 1, num * 10 + dic[w[i]], cnt)
            vis[i] = False

    if 0 in st or (2 in st and 5 in st) or (6 in st and 9 in st):
        print(-1)
    else:
        for i in range(1, 5):
            dfs(0, 0, i)
        res.sort()
        if k > len(res):
            print(res[-1])
        else:
            print(res[k - 1])

if __name__ == "__main__":
    main()
  • Java
import java.util.*;

public class Main {
    private static int[] w;
    private static boolean[] vis;
    private static List<Integer> res = new ArrayList<>();
    private static Map<Integer, Integer> dic = Map.of(2, 5, 5, 2, 6, 9, 9, 6);

    private static void dfs(int u, int num, int cnt) {
        if (u == cnt) {
            res.add(num);
            return;
        }
        for (int i = 0; i < 4; i++) {
            if (vis[i]) continue;
            vis[i] = true;
            dfs(u + 1, num * 10 + w[i], cnt);
            if (dic.containsKey(w[i])) {
                dfs(u + 1, num * 10 + dic.get(w[i]), cnt);
            }
            vis[i] = false;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().trim().split(",");
        w = Arrays.stream(input).mapToInt(Integer::parseInt).toArray();
        Arrays.sort(w);
        Set<Integer> st = new HashSet<>();
        for (int num : w) {
            st.add(num);
        }
        vis = new boolean[4];
        int k = w[w.length - 1];

        if (st.contains(0) || (st.contains(2) && st.contains(5)) || (st.contains(6) && st.contains(9))) {
            System.out.println(-1);
        } else {
            for (int i = 1; i <= 4; i++) {
                dfs(0, 0, i);
            }
            Collections.sort(res);
            if (k > res.size()) {
                System.out.println(res.get(res.size() - 1));
            } else {
                System.out.println(res.get(k - 1));
            }
        }
    }
}

  • Cpp
#include <bits/stdc++.h>

using namespace std;

vector<int> w;
bool vis[4];
vector<int> res;
unordered_map<int, int> dic = {{2, 5}, {5, 2}, {6, 9}, {9, 6}};

void dfs(int u, int num, int cnt) {
    if (u == cnt) {
        res.push_back(num);
        return;
    }
    for (int i = 0; i < 4; ++i) {
        if (vis[i]) continue;
        vis[i] = true;
        dfs(u + 1, num * 10 + w[i], cnt);
        if (dic.count(w[i])) {
            dfs(u + 1, num * 10 + dic[w[i]], cnt);
        }
        vis[i] = false;
    }
}

int main() {
    string input;
    getline(cin, input);
    replace(input.begin(), input.end(), ',', ' ');
    stringstream ss(input);
    int num;
    while (ss >> num) {
        w.push_back(num);
    }
    sort(w.begin(), w.end());
    unordered_set<int> st(w.begin(), w.end());
    int k = w[w.size() - 1];

    if (st.count(0) || (st.count(2) && st.count(5)) || (st.count(6) && st.count(9))) {
        cout << -1 << endl;
    } else {
        for (int i = 1; i <= 4; ++i) {
            dfs(0, 0, i);
        }
        sort(res.begin(), res.end());
        if (k > res.size()) {
            cout << res.back() << endl;
        } else {
            cout << res[k - 1] << endl;
        }
    }

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

修改网络的结构用于预训练

目录 一、模型准备 二、修改结构 1、在网络中添加一层 2、在classifier结点添加一个线性层 3、修改网络中的某一层(features 结点举例&#xff09; 4、替换网络中的某一层结构&#xff08;与第3点类似&#xff09; 5、提取全连接层的输入特征数和输出特征数 6、删除网络…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

《昇思25天学习打卡营第2天|快速入门》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 数据集处理2. 网络的构建3. 模型训练4. 保存模型5. 加载模型 总体代码与运行结果&#xff1a;1. 总体代码2. 运行结果 前言&#xff1a; 今天是学习打卡的第2天&#xff0c;今天的内容是对MindSpore的一个快速入门&#xff0…

Selenium IDE 的使用指南

Selenium IDE 的使用指南 在自动化测试的领域中&#xff0c;Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件&#xff0c;为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…

第十三章 常用类

一、包装类 1. 包装类的分类 &#xff08;1&#xff09;针对八种基本数据类型相应的引用类型—包装类 &#xff08;2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法。 2. 包装类和基本数据的转换 jdk5 前的手动装箱和拆箱方式&#xff0c;装箱&#xff1a;基本…

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计&#xff08;去重&#xff09; 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…

深度学习实验第T2周:彩色图片分类

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 目标 二、我的环境&#…

【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录 进程通信是什么&#xff1f; 进程通信的目的 进程通信的本质 匿名管道&#xff1a;基于文件级别的通信方式 站在文件描述符角度-深度理解管道原理 进程通信是什么&#xff1f; 进程通信就是两个或多个进程之间进行数据层面的交互。 进程通信的目的 1.数据传输&#x…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException&#xff1a;无法移除最后一个所有者的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

mac Canon打印机连接教程

官网下载安装驱动&#xff1a; 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加&#xff1a; OK可打印玩耍&#xff01;&#xff01; 备注&#xff1a; 若需扫描&#xff0c;下载扫描程序&#xff1a; 备注&#xff1a;…

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本&#xff0c;将所有代码复制到记事本中&#xff0c;保存文件时候修改文件后…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer&#xff0c;ZeRO)算法实现&#xff0c;一个来自DeepSpeed&#xff0c;另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来&#xff0c;以供最终用户在训练/微调模型时自主选择其中之…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 4 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…