• 枚举--假币问题


    有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。


    输入:第一行是测试数据组数。每组数据有三行,每行表示一次称量的结果。银币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币 天平右边放置的硬币 平衡状态。其中平衡状态用``up'', ``down'', 或 ``even''表示, 分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。

    输出:输出哪一个标号的银币是假币,并说明它比真币轻还是重。

    输入样例
    1
    ABCD EFGH even
    ABCI EFJK up
    ABIJ EFGH even
    输出样例
    K is the counterfeit coin and it is light.

    解题思路:对于每一枚硬币先假设它是轻的,看这样是否符合称量结果。如果符合,问题即解决。如果不符合,就假设它是重的,看是否符合称量结果。把所有硬币都试一遍,一定能找到特殊硬币。

    """
    输入样例
    1
    ABCD EFGH even
    ABCI EFJK up
    ABIJ EFGH even
    输出样例
    K is the counterfeit coin and it is light.

    """
    #输入测试数据时,是一行一行输入的,没有实现整行一次输入,需要优化

    list = []

    def GetInputList():
    groupNum = int(input("请输入测试数据组数:"))
    for i in range(3):
    list.append(input().split())
    #假设球是轻的情况,对输入的测量数据都应该满足,如果不满足,则假设不成立
    def IsFakeLight(c):
    for j in range(3):
    if list[j][2][0] == 'u':
    if list[j][1].find(c) < 0:
    return False
    break
    if list[j][2][0] == 'e':
    if list[j][0].find(c) >= 0 or list[j][1].find(c) >= 0:
    return False
    break
    if list[j][2][0] == 'd':
    if list[j][0].find(c) < 0:
    return False
    break
    return True
    #假设球是重的情况
    def IsFakeWeight(c):
    for j in range(3):
    if list[j][2][0] == 'u':
    if list[j][0].find(c) < 0:
    return False
    break
    if list[j][2][0] == 'e':
    if list[j][0].find(c) >= 0 or list[j][1].find(c) >= 0:
    return False
    break
    if list[j][2][0] == 'd':
    if list[j][1].find(c) < 0:
    return False
    break
    return True
    def main():
    #input("请输入三组数据,每组数据以空格间隔:").split()
    GetInputList()
    for i in range(65,77): #遍历A--M,因为需要遍历到L字母,所以写M
    #从A-L逐个枚举验证
    #如果本枚假币是轻的情况,对输入的3个测量结果都成立,则输出该枚硬币
    if IsFakeLight(chr(i)):
    print("%c is the counterfeit coin and it is light." %i)
    break
    # 如果本枚假币是重的情况,对输入的3个测量结果都成立,则输出该枚硬币
    if IsFakeWeight(chr(i)):
    print("%c is the counterfeit coin and it is weight." % i)
    break

    if __name__=="__main__":
    main()
  • 相关阅读:
    C# 网络编程之基于SMTP发送电子邮件
    C#实现邮件发送的功能
    Java发邮件基础篇
    java发送邮件高级篇
    Windows下bat脚本自动发邮件
    Python发送QQ邮件
    信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
    DOS命令整理
    JAVA对时间的操作
    JAVA 调用HTTP接口POST或GET实现方式(转)
  • 原文地址:https://www.cnblogs.com/an-wl/p/12263813.html
Copyright © 2020-2023  润新知