位元組跳動校招 程式設計題(Python)

2021-09-12 17:15:47 字數 1544 閱讀 8905

有三隻球隊,每只球隊編號分別為球隊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」
示例1

2

3 3 0 0

3 3 3 3

yes

no

case1: 球隊1和球隊2 差0分,球隊2 和球隊3也差0分,所以可能的賽得分是三隻球隊各得1分

case2: 球隊1和球隊2差3分,球隊2和球隊3差3分,所以可能的得分是 球隊1得0分,球隊2得3分, 球隊3 得0分,比賽已經全部結束因此最終不能打平。

題意: 給四個數n,k,d1,d2,n是比賽的總場數,k是目前已經比賽的場數,d1,d2分別是球隊一(下面用a表示)球隊二(下面用b表示)的比分差和球隊二球隊三(下面用c表示)的比分差,求經過n-k場比賽後是否有可能三個隊打平。

分析:這個題還是挺不錯的,先來分析一下總共有四種情況:

case1:a比b多d1並且b比c多d2。要有滿足題意的可能性,得滿足一下要求:

t = int(input())

for i in range(t):

[n, k, d1, d2] = [int(x) for x in input().split(' ')]

r = n - k # 剩餘的比賽場數

if d1>d2:

x = 2*d1-d2

y = d1

else:

x = 2*d2-d1

y = d2

if (r-(2*d1+d2))>=0 and (r-(2*d1+d2))%3==0 and (n-3*(d1+d2))>=0 and (n-3*(d1+d2))%3==0:

print('yes')

elif (r-x)>=0 and (r-x)%3==0 and (n-3*y)>=0 and (n-3*y)%3==0:

print('yes')

elif (r-(d1+d2))>=0 and (r-(d1+d2))%3==0 and (n-3*y)>=0 and (n-3*y)%3==0:

print('yes')

elif (r-(d1+2*d2))>=0 and (r-(d1+2*d2))%3==0 and (n-3*(d1+d2))>=0 and (n-3*(d1+d2))%3==0:

print('yes')

else:

print('no')

位元組跳動校招 附加題(Python)

存在n 1個房間,每個房間依次為房間1 2 3.i,每個房間都存在乙個傳送門,i房間的傳送門可以把人傳送到房間pi 1 pi i 現在路人甲從房間1開始出發 當前房間1即第一次訪問 每次移動他有兩種移動策略 a.如果訪問過當前房間 i 偶數次,那麼下一次移動到房間i 1 b.如果訪問過當前房間 i ...

位元組跳動2019校招前端筆試

題目描述 開心消消樂 給定乙個一維的正整數陣列,逐次選擇其中乙個數做消除,消除所獲得的分數為當前數字和左右相鄰數字的乘積 當左邊或者右邊沒有數字可以認為是1 e.g.輸入陣列 3,1,5,8 step1 消除1 獲得分數 15 3x1x5,陣列變為 3,5,8 step2 消除5,獲得分數 120 ...

位元組跳動2019校招前端筆試

題目描述 給一些駝峰式的變數名,將它們轉換為下劃線式的,要求及說明如下 輸入資料一定為合法的 駝峰式 變數名,變數名由若干單詞組成,單詞應當為首字母大寫,或全大寫,或全小寫。如 variable onevariable onehttprequest 如 variable one variable o...