• 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。

  • 相关阅读:
    QT QML 界面设计教程2——图标(图片)按钮样式
    百度云版微信测试号专属浪漫消息推送(最新版)
    uni-app框架开发app中出现的问题
    对日项目工作总结
    【微服务】API治理发展历史与未来趋势
    字节码增强技术-ASM
    序列化(二)Parcelable
    【FreeRTOS】10 事件标志组
    [Java] 乐观锁?公平锁?可重入锁?盘点Java中锁相关的概念
    在Ubuntu使用Git向Github发布自己的项目
  • 原文地址:https://blog.csdn.net/starry_night_summer/article/details/127875524