lmx120628 2023-10-31 20:03 采纳率: 60%
浏览 9

c++密码尝试求思路

题目描述
小J 成功进入了他最喜欢的网站 百度。小J 在他访问过的网站上注册使用了 n 个不同的密码,但他不记得自己在注册 百度 时到底指定了哪个密码。
小J 会按照密码长度不递减的顺序输入密码,他还会按照任意顺序输入相同长度的密码。当 小J 输入正确的密码后,他就可以立即登录网站。小J 不会重复输入任何密码。
对 小J 来说,输入任何密码都只需一秒钟的时间。但如果 小J 输入了 k 次错误密码,那么他需要等待 5 秒钟才能进行下一次尝试。小J 每次尝试都是立即进行的,也就是说,在小J 能够输入密码的每一时刻,他都在进行尝试。
请计算在最好的情况下(尽可能缩短输入时间)和在最坏的情况下(尽可能延长输入时间),小J 需要多少秒才能输入正确的密码从而登陆百度。

输入
第一行,两个整数 n 和 k(1 ≤ n,k ≤ 100),即小J 的密码数和尝试失败的次数,尝试失败后,网站访问将被阻止 5 秒。
接下来的 n 行,每行一个密码,由英文字母和数字组成的非空字符串,长度不超过 100 个字符。
最后一行,小J 的 百度 的密码。保证小J 的密码等于他的 n 个密码中的某个密码。
输出
两个整数,分别表示小J 在最好和最坏情况下成功登录百度的时间。
样例
输入1
5 2
cba
abc
bb1
abC
ABC
abc
输出1
1 15
输入2
4 100
11
22
1
2
22
输出2
3 4
提示
【样例解释】
样例1。所有密码的长度相同,小J 可以在第一次尝试和最后一次尝试时输入正确的密码。如果他在第一次尝试时输入正确的密码,那么他正好花费 1 秒钟。如果在最后一次尝试时输入密码,那么他在此之前又输入了 4 个密码。他先花 2 秒钟输入前 2 个密码,然后等 5 秒钟,然后他再花 2 秒钟输入 2 个错误密码,再次等待 5 秒钟,最后再花 1 秒钟输入正确密码。总之,在最坏的情况下,他能在 15 秒内成功登陆。
样例2。所需的密码长度为 2,小J 会输入所有长度为 1 的密码,这样就会花费 2 秒钟。然后,在最好的情况下,他立即输入正确的密码,最好情况的答案是 3,但在最坏的情况下,他输入了长度为 2 的错误密码,然后才输入正确的密码,总共花费了 4 秒钟。

有没有谁教一下我思路?谢谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-01 05:13
    关注

    【以下回答由 GPT 生成】

    这个问题可以通过计算密码长度和密码索引的方式来求解。首先,我们需要将输入的密码进行排序,并计算每个密码的长度。然后,我们可以根据输入的n和k的值来确定最好和最坏的情况。

    在最好的情况下,我们可以假设小J第一次尝试的密码就是正确的密码。这样,他只需要输入一次密码并成功登录。因此,最好的情况下,总时间为1秒。

    在最坏的情况下,我们可以假设小J在尝试正确密码之前输入了k-1个错误密码。对于每个错误密码,输入时间为1秒钟,并需要等待5秒钟。因此,总时间为(1+5)*(k-1)+1秒。

    以下是我给出的具体解决方案的代码:

    n, k = map(int, input().split())  # 输入n和k的值
    passwords = []  # 存储密码
    for _ in range(n):
        password = input()  # 输入密码
        passwords.append((password, len(password)))  # 存储密码及其长度
    
    passwords.sort(key=lambda x: x[1])  # 根据密码长度进行排序
    
    target_password = input()  # 输入目标密码
    
    best_case_time = 1  # 最好情况下的时间
    worst_case_time = (1 + 5) * (k-1) + 1  # 最坏情况下的时间
    
    for password, password_length in passwords:
        if password_length == len(target_password) and password != target_password:
            worst_case_time += 1 + 5  # 输入错误密码的时间和等待时间
    
    print(best_case_time, worst_case_time)  # 输出最好和最坏情况下的时间
    

    在这个代码中,我们首先输入n和k的值,然后根据输入的密码和密码长度排序。接下来,我们输入目标密码,并初始化最好和最坏情况下的时间。最后,我们迭代所有密码,如果找到与目标密码长度相同且不等于目标密码的密码,则将最坏情况下的时间增加相应的时间。 最后,我们输出最好和最坏情况下的时间。

    希望这个解决方案对你有帮助!如果有任何疑问,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月31日