找出一手由 2 个或更多 A 组成的二十一点手牌的所有可能总和
Find all possible sums of a blackjack hand consistes of 2 or more Aces
假设我有一手 3 张 A。在二十一点中,每个 A 的值可以是 1 或 11。我需要找到所有可能的 A 总和,如下所示:
1 , 1, 1 = 3
1 , 1, 11 = 13
1, 11, 1 = 13
1, 11, 11 = 23
11, 1, 1 = 13
11, 1, 11 = 23
11, 11, 1 = 23
11, 11, 11 = 33
我的示例的输入是 3 个 A 的列表。其中有一个 API 评估每个 A 和 returns 每个 A 的两个值 (1,11) 的列表。所以输入变成类似 Z = ((1,11),(1,11),(1,11)) 的东西。并且输出应该是Z的所有可能的总和组合。注意A的输入数量是未知的!
是2^(ace数)个组合。你能指导我通过算法找到所有可能的值吗?谢谢
如果我没有正确理解你的问题:你手里有 n
个 A,想列出这手牌的所有可能值。
确定手牌价值的唯一决定是:多少个 A 算作 11?
如果我们称k
这个数字,那么算作1的ace数就是n - k
。
这给出了以下迭代算法:
list_of_possible_values = empty_list
for (k = 0; k <= n; k++)
{
value = k * 11 + (n - k) * 1
list_of_possible_values.push(value)
}
return list_of_possible_values
请注意,您可以进一步简化:
value = k * 11 + (n - k) * 1
value = k * (11 - 1) + n
value = k * 10 + n
这是等差数列。 k
增加 1 导致 value
增加 10。我们可以相应地重写代码:
list_of_possible_values = empty_list
for (v = n; v <= 11*n; v+=10)
{
list_of_possible_values.push(v)
}
return list_of_possible_values
今天的大多数语言都有预定义的函数来处理算术级数。在 python:
possible_values = range(n, 11*n+1, 10)
假设我有一手 3 张 A。在二十一点中,每个 A 的值可以是 1 或 11。我需要找到所有可能的 A 总和,如下所示:
1 , 1, 1 = 3
1 , 1, 11 = 13
1, 11, 1 = 13
1, 11, 11 = 23
11, 1, 1 = 13
11, 1, 11 = 23
11, 11, 1 = 23
11, 11, 11 = 33
我的示例的输入是 3 个 A 的列表。其中有一个 API 评估每个 A 和 returns 每个 A 的两个值 (1,11) 的列表。所以输入变成类似 Z = ((1,11),(1,11),(1,11)) 的东西。并且输出应该是Z的所有可能的总和组合。注意A的输入数量是未知的!
是2^(ace数)个组合。你能指导我通过算法找到所有可能的值吗?谢谢
如果我没有正确理解你的问题:你手里有 n
个 A,想列出这手牌的所有可能值。
确定手牌价值的唯一决定是:多少个 A 算作 11?
如果我们称k
这个数字,那么算作1的ace数就是n - k
。
这给出了以下迭代算法:
list_of_possible_values = empty_list
for (k = 0; k <= n; k++)
{
value = k * 11 + (n - k) * 1
list_of_possible_values.push(value)
}
return list_of_possible_values
请注意,您可以进一步简化:
value = k * 11 + (n - k) * 1
value = k * (11 - 1) + n
value = k * 10 + n
这是等差数列。 k
增加 1 导致 value
增加 10。我们可以相应地重写代码:
list_of_possible_values = empty_list
for (v = n; v <= 11*n; v+=10)
{
list_of_possible_values.push(v)
}
return list_of_possible_values
今天的大多数语言都有预定义的函数来处理算术级数。在 python:
possible_values = range(n, 11*n+1, 10)