本文主要是介绍工号不够用了怎么办_100分_A/B卷复用_数学推导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
工号不够用了怎么办
题目描述:
3020年,空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。
现在,请你负责调研新工号系统。
继承历史传统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。
新工号由一段英文字母开头,之后跟随一段数字,比如”aaahw0001″,”a12345″,”abcd1″,”a00″。
注意:新工号不能全为字母或者数字,允许数字部分有前导0或者全为0。
但是过长的工号会增加同事们的记忆成本,现在给出新工号至少需要分配的人数X和新工号中字母的长度Y,求新工号中数字的最短长度Z。
输入输出描述:
输入描述:
一行两个非负整数 X Y,用数字用单个空格分隔。
0< X <=2^50 – 1
0< Y <=5
输出描述:
输出新工号中数字的最短长度
示例1:
输入:260 1
输出:1
示例2:
输入:26 1
输出:1
说明: 数字长度不能为0
示例3:
输入:2600 1
输出:2
解题思路:
题目要求求数字的位数z:
1、题目要求工号中必修有数字,即:z >= 1。
2、数学推导:数字有10种,小写字母有26个,
3、得到公式,已知字母个数为 a,数字的个数为 b,则能编制的号码数量 n 为: n = 2 6 a ∗ 1 0 b n = 26^{a} * 10^{b} n=26a∗10b
代码:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int x = scanner.nextInt();int y = scanner.nextInt();// 字母能够表示的人数int sum = (int) Math.pow(26, y);// 数字个数int dig = 1;// y个字母、dig数字能够编号的人数:(26 ^ y) * (10 ^ dig) while (sum * Math.pow(10, dig) < x) {dig++;}System.out.println(dig);
}
这篇关于工号不够用了怎么办_100分_A/B卷复用_数学推导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!