HNU软件工训作业训练一编程题14. 拳王阿里

【问题描述】

       阿里是上个世纪美国最著名的拳击手,阿里在20年的时间里多次获得重量级拳王称号。不过不幸的是,他在之后患上了帕金森氏病。他参加了许多比赛,多到连自己都数不清了。
    有这么一段时间,他总是参加各种不同的比赛,以至于他自己也不知道从第一场比赛开始到最后一场比赛结束到底用了多长时间。他只记得比赛的第一天是星期几(S),最后一场比赛的最后一天是星期几(E)。他还记得比赛的总天数(包括第一和最后一天)不少于L天,也不多于R天。给定S和E,能否唯一确定参加比赛总天数(包含该段时间内比赛间的间隔天数)?

【输入形式】

       输入的第一行包含一个整数T,代表测试数据的组数。接下来是 T 组数据。每组数据仅有一行,首先包含两个字符串S和E,然后包含两个整数L和R。

    • 1 ≤ T ≤ 10,000        1 ≤ L ≤ R ≤ 100

    • S, E ∈ {“monday”,“tuesday”,“wednesday”,“thursday”,“friday”,“saturday”, “sunday”}

【输出形式】

    对于每组数据:

    • 如果不存在满足条件的天数,输出一行“impossible”;

    • 如果存在多个满足条件的天数,输出一行“many”;

    • 否则,输出一行,包含一个整数,代表唯一满足条件的天数。

【样例输入】

3
saturday sunday 2 4 
monday wednesday 1 20 
saturday sunday 3 5

【样例输出】

2
many
impossible

【样例说明】

【评分标准】

答案如下

def day_to_number(day):
    days = {
        "monday": 0,
        "tuesday": 1,
        "wednesday": 2,
        "thursday": 3,
        "friday": 4,
        "saturday": 5,
        "sunday": 6
    }
    return days[day]

T=int(input())
data=[]
data.append(T)
for i in range(T):
    b=input()
    data.append(b)  
results = []

for i in range(1, T + 1):
    S, E, L, R = data[i].split()
    L = int(L)
    R = int(R)
    
    start_day = day_to_number(S)
    end_day = day_to_number(E)
    
    possible_N = []
    
    for N in range(L, R + 1):
        if (start_day + N - 1) % 7 == end_day:
            possible_N.append(N)
    
    if len(possible_N) == 0:
        results.append("impossible")
    elif len(possible_N) > 1:
        results.append("many")
    else:
        results.append(str(possible_N[0]))

for result in results:
        print(result)

知识总结

家人们看代码也看出来了,基本没什么太难的点,我觉得主要是这个思路很难想通,将可能的总天数看成一个列表,当列表为空输出不可能,为一输出数,大于一输出many,计算逻辑是通过对星期的加和与7求余所得星期数 与 末星期数做对比求得

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值