校招真题练习031 三支球队比分(头条)

三支球队比分(编程题1)

题目描述
有三只球队,每只球队编号分别为球队1,球队2,球队3,这三只球队一共需要进行 n 场比赛。现在已经踢完了k场比赛,每场比赛不能打平,踢赢一场比赛得一分,输了不得分不减分。已知球队1和球队2的比分相差d1分,球队2和球队3的比分相差d2分,每场比赛可以任意选择两只队伍进行。求如果打完最后的 (n-k) 场比赛,有没有可能三只球队的分数打平。



输入描述:
第一行包含一个数字 t (1 <= t <= 10)
接下来的t行每行包括四个数字 n, k, d1, d2(1 <= n <= 10^12; 0 <= k <= n, 0 <= d1, d2 <= k)

输出描述:
每行的比分数据,最终三只球队若能够打平,则输出“yes”,否则输出“no”

N = int(input())
for i in range(N):
    ary = list(map(int,input().split()))
    n,k,d1,d2 = ary[0],ary[1],ary[2],ary[3]
    diff = n - k
    r1 = diff - (d1 + d2) - d2
    r1x = k - d1 - (d1 + d2)
    r2 = diff - d1 - d2
    r2x = k - (d1 - d2) - d1 if d1 >= d2 else k - (d2 - d1) - d2
    r3 = diff - d1 - (d1 - d2) if d1 >= d2 else diff - d2 - (d2 - d1)
    r3x = k - (d1 + d2)
    r4 = diff - d1 - (d1 + d2)
    r4x = k - (d1 + d2) - d2
    #1. 球队1 <= 球队2 <= 球队3
    if r1 >= 0 and r1 % 3 == 0 and r1x >= 0 and r1x % 3 == 0:
        print('yes')
    #2. 球队1 <= 球队2 >= 球队3
    elif r2 >= 0 and r2 % 3 == 0 and r2x >= 0 and r2x % 3 == 0:
        print('yes')
    #3. 球队1 >= 球队2 <= 球队3
    elif r3 >= 0 and r3 % 3 == 0 and r3x >= 0 and r3x % 3 == 0 :
        print('yes')
    #4. 球队1 >= 球队2 >= 球队3
    elif r4 >= 0 and r4 % 3 == 0 and r4x >= 0 and r4x % 3 == 0:
        print('yes')
    else:
        print('no')

这题逻辑性很强,稍有不慎就可能出错。

要判断已经完成的比赛数的特征和剩余比赛数的特征,并分四种情况分别计算。

我感觉这道题目的描述不是很清楚,对于标红的那句描述:“已知球队1和球队2的比分相差d1分”而下面又给出条件“0 <= d1”,

我读到这句话后认为是:“球队2比球队1多d1分”。但是题目的实际意思却是:可能球队1比球队2多d1分,也可能球队2比球队1多d1分,需要分情况讨论。

至少这两种情况是不确定的,这就给答题者造成了不必要的干扰。所以这道题目,只能给个差评。

原文地址:https://www.cnblogs.com/asenyang/p/11318323.html