• OD华为机试 11


    员工工号问题

    描述

    工号系统由小写英文字母(a-z)和数字(0-9)两部分构成。新工号由一段英文
    字母开头,之后跟随一段数字,比如"aaahw0001",“a12345”,“abcd1”,“a00”
    注意新工号不能全为字母或者数字,允许数字部分有前导 0 或者全为 0。
    但是过长的工号会增加同事们的记忆成本
    现在给出新工号至少需要分配的人数X 和新工号中字母的长度 Y
    求新工号中数字的最短长度 Z。
    一行两个非负整数 X Y,数字用单个空格分隔
    输出新工号中数字的最短长度 Z

    示例1:
    输入

    260 1
    
    • 1

    输出

    1
    
    • 1

    示例2:
    输入

    26 1
    
    • 1

    输出

    1
    
    • 1

    说明
    数字长度不能为0

    示例3:
    输入

    2600 1
    
    • 1

    输出

    2
    
    • 1

    法一

    import java.util.*;
    
    public class Main {
        public static final int LETTER_NUMBER = 26;
        public static final int DIGIT_NUMBER = 10;
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNext()) {
                String[] str = sc.nextLine().split("\\s");
                if (str.length == 2) {
                    int people = Integer.parseInt(str[0]);
                    int letter = Integer.parseInt(str[1]);
                    int number = count(people, letter);
                    System.out.println(number);
                }
            }
        }
        public static int count(int people, int letter) {
            //英文字母是26的次方,而数字的次方,只需要加到大于人数
            int i = 0;
            while ((Math.pow(LETTER_NUMBER, letter) * (Math.pow(DIGIT_NUMBER,
                    i))) < people) {
                i++;
            }
            if (i == 0) {
                return 1;
            } else {
                return i;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    算法实现

    工号由字符和数字组成,英文字母一共有26个,数字字符一共有10个。
    根据题目要求,我们使用y 来表示字符的长度,每个位置上都可以使用26个字母中的任意一个,相互之间不影响,因此字符的可以表示的组合数是 26^y个。
    我们使用i来表示数字的长度,0-9 一共10个数字,可以使用全0 或者 前导0 数字部分是 10^i个
    组合起来一共可以表示的人数是26^y * 10^i个。

    题目要求根据可以表示的人数,求最小的i。

  • 相关阅读:
    CTFSHOW -SQL 注入
    Java第2章 类与对象(一)
    南大通用数据库-Gbase-8a-学习-38-常规日志(general log)
    ACU-01B 3HNA024871-001/03 机器人将如何改变世界
    Hystrix学习
    AIGC 绘画Stable Diffusion工具的安装与使用
    Python OpenCV剪裁图片并修改对应的Labelme标注文件
    Redis源码篇(7)——哨兵模式
    E. Expenditure Reduction(思维+预处理+蛮力)
    计算机毕业设计ssm+vue基本微信小程序的拼车自助服务小程序
  • 原文地址:https://blog.csdn.net/starry_night_summer/article/details/127875524