1. 程式人生 > >演算法題:A與B玩遊戲若干輪,獲勝方獲得該輪分數,已知結束後A,B得分,求A最少獲勝次數

演算法題:A與B玩遊戲若干輪,獲勝方獲得該輪分數,已知結束後A,B得分,求A最少獲勝次數

描述

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,跳過最後的數繼續向下搜尋累加,直到滿足返回。