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

news2024/11/26 0:31:56

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

✨ 本系列打算持续跟新华为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;
}

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

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

相关文章

第5章 传输层

王道学习 考纲内容 &#xff08;一&#xff09;传输层提供的服务 传输层的功能&#xff1a;传输层寻址与端口&#xff1b;无连接服务和面向连接服务 &#xff08;二&#xff09;UDP UDP数据报&#xff1b;UDP检验 &#xff08;三&#xff09;TCP …

坑——python的redis库的decode_responses设置

python的redis库查询返回的值默认是返回字节串&#xff0c;可以在redis.Redis()方法中通过设置decode_responses参数&#xff0c;让返回值直接是字符串&#xff1b; 查询返回字节串是因为Redis()方法中decode_responses默认值是False&#xff1a; 设置decode_responses为True就…

mac Canon打印机连接教程

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

java 统计xmind的结点数(测试用例case数)

mac电脑解压出来的xmind的数据主要在content.json上 开头结尾有[],里面是json import org.json.JSONArray; import org.json.JSONObject; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public class XMindLeafCounter2 {public stat…

小程序驾校预约系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学员管理&#xff0c;教练管理&#xff0c;驾校信息管理&#xff0c;驾校车辆管理&#xff0c;教练预约管理&#xff0c;考试信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;驾校信息&am…

【面试干货】与的区别:位运算符与逻辑运算符的深入探讨

【面试干货】&与&&的区别&#xff1a;位运算符与逻辑运算符的深入探讨 1、&&#xff1a;位运算符2、&&&#xff1a;逻辑运算符3、&与&&的区别 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; & 和 …

赛目科技三度递表:净利率及资产回报率不断下滑,经营成本越来越高

《港湾商业观察》施子夫 5月29日&#xff0c;北京赛目科技股份有限公司&#xff08;以下简称&#xff0c;赛目科技&#xff09;第三次递表港交所&#xff0c;公司拟主板上市&#xff0c;独家保荐机构为光银国际。 公开信息显示&#xff0c;赛目科技此前曾于2022年12月&#x…

使用li标签实现数据列表效果(鼠标移动和选中时均有阴影效果)

文章目录 一、最终效果&#xff1a;二、完整页面代码 一、最终效果&#xff1a; 选中的数据有阴影效果&#xff0c;鼠标移动时也有阴影效果 二、完整页面代码 list-style-type: none是去掉无序标签前的点的样式 <template><div><div class"my-new-lis…

智能农业技术:物联网、无人机与机器人引领的绿色革命

在这个信息化与智能化并行的时代&#xff0c;农业——这个最古老的人类产业&#xff0c;正经历一场前所未有的科技变革。物联网&#xff08;IoT&#xff09;、无人机&#xff08;UAV&#xff09;和机器人技术的深度融合&#xff0c;正逐步构建起一个高效、精准、可持续的现代农…

判断时间序列中的元素是否为:年初、年末、季初、季末

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 判断时间序列中的元素是否为&#xff1a; 年初、年末、季初、季末 Series.dt.is_year_start Series.dt.is_year_end Series.dt.is_quarter_start Series.dt.is_quarter_end 选择题 关于以下…

人工智能设备pbootcms网站模板源码

模板介绍 人工智能行业发展趋势不断攀升逐渐成为了新业态&#xff0c;小编精心为大家收集整理了一款HTML5人工智能设备pbootcms网站模板整站源码下载&#xff0c;可帮助您快速建站以展示企业的产品与业务&#xff0c;响应式自适应设计也会适配所有浏览设备。 模板截图 源码下…

vue2(vue-cli3x[vue.config.js])使用cesium新版(1.117.0)配置过程

看来很多解决方法都没有办法&#xff0c;最后终于。呜呜呜呜 这里我用的是vue-cli去搭建的项目的vue2 项目&#xff0c;其实不建议用vue2搭配cesium。因为目前cesium停止了对vue2的版本更新&#xff0c;现在默认安装都是vue3版本&#xff0c;因此需要控制版本&#xff0c;否则…

kafka-Stream详解篇(附案例)

文章目录 Kafka Stream 概述Kafka Stream 概念Kafka Stream 数据结构入门案例一需求描述与分析配置KafkaStream定义处理流程声明Topic接收处理结果发送消息测试 入门案例二需求描述与分析定义处理流程接收处理结果声明Topic 更多相关内容可查看 Kafka Stream 概述 Kafka Strea…

qt实现打开pdf(阅读器)功能用什么库比较合适

关于这个问题&#xff0c;网上搜一下&#xff0c;可以看到非常多的相关博客和例子&#xff0c;可以先看看这个总结性的博客&#xff08;https://zhuanlan.zhihu.com/p/480973072&#xff09; 该博客讲得比较清楚了&#xff0c;这里我再补充一下吧&#xff08;qt官方也给出了一些…

【漏洞复现】飞企互联——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

【LeetCode】接雨水

目录 一、题目二、解法完整代码 一、题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff…

力扣 移除元素

class Solution {public int removeElement(int[] nums, int val) {int left 0;for(int right 0;right<nums.length;right){if(nums[right] ! val){nums[left] nums[right];left;}}return left;} }

2000-2022年 省、市、县三级逐年归一化植被指数NDVI

NDVI&#xff08;归一化植被指数&#xff09;是一种重要的遥感指数&#xff0c;广泛应用于植被生长状况的监测和评估。以下是对省、市、县三级逐年归一化植被指数NDVI数据的介绍&#xff1a; 数据简介 定义&#xff1a;NDVI是一种基于植被在红光和近红外波段反射特性的遥感指…

Java学习 - Redis缓存问题与优化

缓存收益与成本 收益 加速读写降低后端、持久层的负载和压力 成本 可能导致数据不一致代码运维成本redis节点运维成本 缓存更新策略 策略一致性维护成本介绍LRU/LIRS算法剔除最差底剔除最近最少使用的数据超时剔除较差底定时删除、惰性删除主动更新最好高持久层更新&#x…

数学建模---最小生成树问题的建模~~~~~Matlab代码

目录 1.相关概念 &#xff08;1&#xff09;什么是树 &#xff08;2&#xff09;生成树和最小生成树&#xff1a; 2.适用赛题 &#xff08;1&#xff09;赛题分类 &#xff08;2&#xff09;不同之处 3.两种算法 &#xff08;1&#xff09;prim算法 &#xff08;2&…