Python石头游戏获胜者程序
假设Amal和Bimal正在玩一个游戏,Amal先走。游戏规则如下:
一堆石头,共有n块。每个玩家可以从堆中拿走一块石头,并根据石头的顺序获得分数。Amal和Bimal对石头的估值可能不同。
我们有两个长度相同的数组,A_Values和B_Values。每个A_Values[i]和B_Values[i]分别表示Amal和Bimal对第i块石头的估值。分数最高者获胜,如果分数相同则平局。双方都会采取最佳策略,并且双方都知道对方的估值。如果Amal获胜,返回1;如果Bimal获胜,返回-1;如果平局,返回0。
例如,如果输入是A_Values = [2,4] B_Values = [3,5],则输出为1,因为Amal会选择第二块石头(分数为4),Bimal只能选择第一块石头(分数为3),Amal分数更高,所以Amal获胜。
解决方法:
- n := A_Values的长度
- combinedValues := 新列表
- for i in range(0, n):
- tmpV := A_Values[i] + B_Values[i]
- 将(tmpV, i)添加到combinedValues列表的末尾
- 将combinedValues列表按降序排序
- score_a := 0, score_b := 0
- for i in range(0, n):
- curV := combinedValues[i]
- if i % 2 == 0:
- score_a := score_a + A_Values[curV[1]]
- else:
- score_b := score_b + B_Values[curV[1]]
- if score_a > score_b:
- return 1
- elif score_a == score_b:
- return 0
- else:
- return -1
示例
让我们看下面的实现,以便更好地理解:
def solve(A_Values, B_Values): n = len(A_Values) combinedValues = [] for i in range(n): tmpV = A_Values[i] + B_Values[i] combinedValues.append([tmpV, i]) combinedValues.sort(reverse=True) score_a, score_b = 0, 0 for i in range(n): curV = combinedValues[i] if (i % 2 == 0): score_a += A_Values[curV[1]] else: score_b += B_Values[curV[1]] if (score_a > score_b): return 1 elif (score_a == score_b): return 0 else: return -1 A_Values = [2,4] B_Values = [3,5] print(solve(A_Values, B_Values))
输入
[2,4], [3,5]
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
输出
1
广告