华为OD机试 - 工号不够用了怎么办 - 双指针(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

3020年,空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。

现在,请你负责调研新工号系统。

继承历史传统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。新工号由一段英文字母开头,之后跟随一段数字。

比如”aaahw0001"、”a12345"、“abcd1”、”a00"。

注意新工号不能全为字母或者数字,允许数字部分有前导0或者全为0。

但是过长的工号会增加同事们的记忆成本,现在给出新工号至少需要分配的人数X和新工号中字母的长度Y,求新工号中数字的最短长度Z。

二、输入描述

一行两个非负整数XY,用数字用单个空格分隔

050-1

0

三、输出描述

输出新工号中数字的最短长度Z。

四、解题思路

小写字母有26种,数字有10种,因此如果工号组合选择一个字母,一个数字的话,则有26*10=260种。

如果选择两个字母,两个数字的话,则会产生262*102种工号。

现在确定了需要的工号总个数x,以及字母个数y,也就是说X=26y*10z

求最小的z,且z>=1。

因此z的求解公式:

z=log(x/26y)

这里我们要保证z向上取整,且保证z最小取1。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        long X = sc.nextLong();
        int Y = sc.nextInt();

        System.out.println((long) Math.max(1, Math.ceil(Math.log10(X / Math.pow(26, Y)))));
    }
}

六、效果展示

1、输入

260 1

2、输出

1

3、说明

华为OD机试 - 工号不够用了怎么办 - 双指针(Java 2023 B卷 100分)_第1张图片


下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,开发语言)