华为OD机试真题 - 最大时间 (D卷,100分)
题目描述
给定一个数组,里面有 6 个整数,求这个数组能够表示的最大 24 进制的时间是多少,输出这个时间,无法表示输出 invalid。
目录
题目描述
输入描述
输出描述
用例
题目解析
Java算法源码
JS算法源码
Python算法源码
C算法源码
华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟,机试是在牛客考试,练习的时候也可以在牛客网练习,提前熟悉操作
https://ac.nowcoder.com/acm/contest/5652/K
点击上方链接进入牛客练习界面,可以自定义题目,自定义输入、输出等等,华为OD真实机试环境,非其他第三方平台模拟。
输入描述
输入为一个整数数组,数组内有六个整数。
输入整数数组长度为 6,不需要考虑其它长度,元素值为 0 或者正整数,6 个数字每个数字只能使用一次。
输出描述
输出为一个 24 进制格式的时间,或者字符串”invalid“。
用例
题目解析
本题可以使用深度优先搜索DFS求解全排列,当然求解过程中需要过滤掉不合法的时间排列,然后剩下只需要进行默认的字典序升序后,获取最后一个时间排列就是最大的时间
JavaScript算法源码
const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { const arr = JSON.parse(line); const regExp = /^(([01][0-9])|([2][0-3]))([0-5][0-9])([0-5][0-9])$/; const backtrack = (arr, used, path, res) => { if (path.length === arr.length) { const timeStr = path.join(""); if (regExp.test(timeStr)) res.push(timeStr); return; } for (let i = 0; i < arr.length; i++) { if (!used[i]) { path.push(arr[i]); used[i] = true; backtrack(arr, used, path, res); used[i] = false; path.pop(); } } }; const res = []; backtrack(arr, new Array(arr.length).fill(false), [], res); if (!res.length) return console.log("invalid"); const max = res.sort().at(-1); console.log(`${max[0]}${max[1]}:${max[2]}${max[3]}:${max[4]}${max[5]}`); });
Java算法源码
import java.util.ArrayList; import java.util.Arrays; import java.util.Link
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试题库D卷 文章被收录于专栏
2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。