回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>更新:我意识到我提出的问题非常糟糕。再来一次。</strong></p>
<p>考虑以下功能:</p>
<pre><code>myList = []
optimumList = []
def findOptimumListItems():
n = 5
for i in range (n + 1):
for j in range (n + 1 - i):
myList.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>((i, j, n-i-j))
for i in myList:
win = 0.0
draw = 0.0
for j in myList:
score = 0
if (i[0] > j[0]):
score += 1
if (i[0] == j[0]):
score += 0.5
if (i[1] > j[1]):
score += 1
if (i[1] == j[1]):
score += 0.5
if (i[2] > j[2]):
score += 1
if (i[2] == j[2]):
score += 0.5
if (score == 2):
win += 1
if (score == 1.5):
draw += 1
if (win/(len(myList)-win-draw) > 1.0):
optimumList.append(i)
return optimumList
</code></pre>
<p>首先我列一张单子。对于n=5,生成的列表为:</p>
^{pr2}$
<p>然后,函数获取列表的每个元素并将其与列表本身进行比较。你是这样做的:假设我在比较[0,0,5]和[3,1,1]。0输给3(所以没分),0输给1,所以没分,5胜1(得1分)。平局得0.5分,获胜得1分。对于任何一个项目,如果赢的比输的多,那么这个项目被认为是最佳的,并被添加到最佳列表中。在</p>
<p>对于n=5,最佳列表为:</p>
<pre><code>[(0, 2, 3), (0, 3, 2), (1, 1, 3), (1, 2, 2), (1, 3, 1), (2, 0, 3),
(2, 1, 2), (2, 2, 1), (2, 3, 0), (3, 0, 2), (3, 1, 1), (3, 2, 0)]
</code></pre>
<p>我的问题是:如何以一种简洁的方式编写上述函数?我对函数算法特别感兴趣。Python,Ruby,Java,Haskell答案将不胜感激。(话虽如此,如果你能用任何语言找到一个简洁的解决方案,那没关系。)</p>
<p>很抱歉重复同样的问题。我同意最初的问题很混乱,很难理解。我希望现在是清楚的。在</p>
<p><strong>更新(根据rampion的评论):</strong>对于这个(或这种类型)问题,是否有一个有效的算法?在</p>