目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、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,用数字用单个空格分隔
0<X<=250-1
0<Y<=5
三、输出描述
输出新工号中数字的最短长度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机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。