演算法題:A與B玩遊戲若干輪,獲勝方獲得該輪分數,已知結束後A,B得分,求A最少獲勝次數
阿新 • • 發佈:2018-12-10
描述
A與B玩遊戲若干輪,獲勝方獲得該輪分數,已知結束後A,B得分,求A最少獲勝次數。 例如:A第1輪獲勝則A加1分,B不得分,A第2輪獲勝則A加2分,B不得分,以此類推。遊戲結束A共x分,B共y分,求A在所有輪次比賽中獲勝最少次數。
輸入:A,B遊戲結束後得分。 輸出:A獲勝最少次數。如果沒有解輸出-1。
Python程式碼
s = input()
x = s.split(' ')[0]
y = s.split(' ')[1]
x = int(x)
y = int(y)
n = ((8*(x+y)+1)**0.5-1)/2#解出比賽輪數
if n != int(n):
print(-1 )
else:
n = int(n)
num = n
pnum = 0
count = 0
def plus(num):
global pnum,count
pnum += num
count += 1
if pnum < x:
plus(num-1)
if pnum == x:
print(num)
return count
if pnum > x:
count-=1
pnum-=num
plus(num-1)
print(plus(num))
分析:最少次數則獲勝輪儘量靠後,由最後一輪開始搜尋累加,一旦和大於x,跳過最後的數繼續向下搜尋累加,直到滿足返回。