华为上机真题工号不够用咋办

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题工号不够用咋办相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

1.3.1 示例 1

1.3.2 示例 2

1.3.3 示例 3

二、解题思路

三、代码实现

四、时间复杂度


一、题目描述

集团员工人数突破 20 亿人,即将遇到工号不够用的情况。现在设计新的工号系统,新的工号系统由小写英文字母(a-z)和数字(0-9)两部分组成。新工号由一段英文字母开头,之后跟随一段数字,比如:“aaahw0001”, “a12345”,“abcd1”,“a00”。注意,新工号不能全部为字母或者数字,允许数字部分有前导0或者全为0。现在给出新工号至少需要分配的人数 X 和新工号中字母的长度 Y,求新工号中数字的最短长度 Z。

1.1 输入描述

一行包含两个非负整数 X  Y, 它们用单个空格分割。其中:

0 < X <= 2^50 - 1

0 < Y <= 5

1.2 输出描述

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

1.3 测试样例

1.3.1 示例 1

输入

260 1

输出

1

说明:由于字母长度为 1,从 26 个字母中选择一个字母的组合数为 26。0-9 这10个数字中,任选一个数字的组合数量为 10,26 * 10 == 260,因此最短数字长度为 1。

1.3.2 示例 2

输入

26 1

输出

1

说明:其实 26 个人只需要 26 个字母就够了,但是由于数字是必须的,所以至少需要 1 个数字。

1.3.3 示例 3

输入

2600 1

输出

2

说明:同上。

二、解题思路

本题属于简单题,假设字母长度为 Y,那么,组合后就有 26^Y 种可能,注意:数字最少一个。数字每一位有 10 中可能,假设 Z 表示数字的个数,总的数量 sum = 26^Y * 10^Z。

三、代码实现

代码实现如下所示。

#include <iostream>
#include <cmath>
using namespace std;

int main()

    long long x, y;
    while (cin>>x>>y) 
        long long sum = (long long )pow(26, y);
        int num = 0;
        if (sum >= x) 
            num = 1;
         else 
            while (sum < x) 
                sum *= 10;
                num++;
            
        
        cout<<num<<endl;
    
    return 0;

四、时间复杂度

时间复杂度:O(1)

在上述代码中,可以通过计算得到所需数字的最短长度,故时间复杂度约为 O(1)。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于华为上机真题工号不够用咋办的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现工号不够用了怎么办?

华为机试真题 Java 实现工号不够用了怎么办?

华为OD机试真题Java实现新工号系统真题+解题思路+代码(2022&2023)

华为OD机试 - 工号不够用了(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试 - 工号不够用了(Java) | 机试题+算法思路+考点+代码解析 2023

华为OD机试题,用 Java 解工号不够用了问题