当前位置: 首页 > news >正文

华为OD机试真题——新工号中数字的最短长度(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《新工号中数字的最短长度》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:新工号中数字的最短长度


  • 知识点:数学(对数计算/二分法)
  • 时间限制:1秒
  • 空间限制:256MB
  • 限定语言:不限

题目描述

3020年,空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。现在,请你负责调研新工号系统。继承历史传统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。新工号由一段英文字母开头,之后跟随一段数字,例如aaahw0001a12345abcd1a00
注意

  1. 新工号不能全为字母或全为数字。
  2. 数字部分允许有前导0或全为0。
  3. 过长的工号会增加记忆成本,现给定需要分配的工号数量X0 < X ≤ 2^50 – 1)和字母部分的长度Y0 < Y ≤ 5),求数字部分的最短长度Z

输入描述
一行两个非负整数X Y,用空格分隔。

输出描述
输出数字部分的最短长度Z

示例

  • 输入:260 1,输出:1
  • 输入:26 1,输出:1(数字长度不能为0)
  • 输入:2600 1,输出:2

解题思路
数学问题,需满足26^Y * 10^Z ≥ X,通过二分法或对数计算求解最小Z


Java

问题分析

题目要求确定新工号系统中数字部分的最短长度Z,使得工号数量满足要求。工号由字母和数字组成,不能全为字母或数字。给定工号需求数量X和字母长度Y,需找到最小的Z使得26^Y * 10^Z ≥ X且Z≥1。


解题思路

  1. 数学计算:利用对数和二分法求解满足条件的最小Z。
  2. 处理大数:使用BigInteger处理大数运算,避免溢出。
  3. 边界条件:确保Z≥1,即使当26^Y ≥X时,也需保证数字部分存在。

代码实现

import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] parts = scanner.nextLine().split(" ");BigInteger X = new BigInteger(parts[0]);int Y = Integer.parseInt(parts[1]);// 计算字母部分的总数A = 26^Ylong A = (long) Math.pow(26, Y);BigInteger aBig = BigInteger.valueOf(A);// 计算所需的最小数字部分数量required = ceil(X/A)BigInteger required = X.add(aBig.subtract(BigInteger.ONE)).divide(aBig);int Z;if (required.compareTo(BigInteger.ONE) <= 0) {// 当required<=1时,Z必须至少为1Z = 1;} else {// 计算required的十进制位数kint k = required.toString().length();int zCandidate = k - 1;BigInteger tenPower = BigInteger.TEN.pow(zCandidate);if (tenPower.compareTo(required) >= 0) {Z = zCandidate;} else {Z = zCandidate + 1;}// 确保Z至少为1Z = Math.max(Z, 1);
http://www.xdnf.cn/news/665299.html

相关文章:

  • 【AI论文】LLaDA-V:具备视觉指令微调能力的大型语言扩散模型
  • 基于 LoRA 和 GRPO 的 Qwen2.5-3B 数学推理模型微调示例
  • java学习日志——Spring Security介绍
  • 二维坐标变换、三维坐标变换、综合变换
  • 人工智能工程师学习路线总结(上)
  • MySQL的日志和备份
  • 热点数据的统计到应用
  • C 语言学习笔记二
  • 202505系分论文《论模型驱动分析方法及应用》
  • FallbackHome的启动流程(android11)
  • 泪滴攻击详解
  • MDM在智能健身设备管理中的技术应用分析
  • 计算机系统简介(二)
  • python打卡day36@浙大疏锦行
  • C++ STL Queue容器使用详解
  • SPL 轻量级多源混算实践 1 - 在 RDB 上跑 SQL
  • vue3 浮点数计算
  • 码蹄集——矩形相交
  • 【大模型】分词(Tokenization)
  • unix的定时任务和quartz和spring schedule的cron表达式区别
  • C# 中 INI 文件操作扩展类:轻松管理配置文件
  • 开发一个交易所大概需要多少成本
  • 调试的按钮
  • 2.1 一文掌握 TypeScript 操作符
  • 配置Maven环境(全局)
  • 【辰辉创聚生物】JAK-STAT信号通路相关蛋白:细胞信号传导的核心枢纽
  • 【C++高级主题】异常处理(四):auto_ptr类
  • Linux三剑客之grep命令使用教程
  • 在Java集合中存储对象时,修改已添加到集合中的可变对象会影响集合中已存储的内容
  • AI系统的冲锋队:在线系统构建与应用