如何循环播放?
p = Table[RandomChoice[{Heads, Tails}, 2 i + 1], {i, 10}];
v = Count[#, Heads] & /@ p;
c = Count[#, Tails] & /@ p;
f = Abs[v - c];
g = Take[f, LengthWhile[f, # != 3 &] + 1]
谢谢!
修改
在这个硬币翻转游戏中,规则如下:
每个人收到8美元 玩游戏。
您可以使用电子表格模拟和/或推理概率来回答这些问题。
该课程正在使用Excel,我正在尝试学习Mathematica。
答案 0 :(得分:4)
在理论方面稍微多一点
您的游戏在 R 1 上是random walk。
因此,获得距离3的翻转数的期望值是3 2 = 9,这也是您的成本的预期值。
由于你每场比赛的收入是8美元,你将以平均每场1美元的价格输掉。
请注意,这些数字与@Mr一致。向导的结果135108 - 120000 = 15108
为15000场比赛。
答案 1 :(得分:3)
如果我理解硬币翻转游戏的规则,并且你必须使用蒙特卡罗方法,请考虑以下事项:
count =
Table[
i = x = 0;
While[Abs[x] < 3, x += RandomChoice[{1, -1}]; i++];
i,
{15000}
];
想法是掷硬币,直到一个人赢了三个,然后输出到达那里所需的转数。这样做15,000次,并创建结果列表(count
)。
你花了15,000场比赛所花的钱只是轮数,或者:
Total @ count
(* Out= 135108 *)
虽然你的奖金是$ 8 * 15,000 = $ 120,000,所以这不是一个好玩的游戏。
如果你需要计算每个回合次数的次数,那么:
Sort @ Tally @ count
答案 2 :(得分:2)
不确定这是否是实现您想要的最佳方式,但这应该让您开始。首先,请注意我将Heads和Tails的名称更改为小写(Heads是一个内置符号......)---小写变量名称是避免此类问题的最佳方法。
Remove[p, v, c, fun, f, g, head, tail];
fun[n_] :=
Do[
Block[
{p, v, c, f, g},
p = Table[RandomChoice[{head, tail}, 2 i + 1], {i, 10}];
v = Count[#, head] & /@ p;
c = Count[#, tail] & /@ p;
f = Abs[v - c];
g = Print[Take[f, LengthWhile[f, # != 3 &] + 1]]
],
{n}]
只需输入您想要运行循环的次数...有趣[5]给出:
{1,1,1,1,5,3}
{3}
{1,1,5,1,5,1,3}
{3}
{1,5,3}
注意:因为你可能想要对输出做些什么,使用Table []可能比Do []更好。这将返回一个列表列表。
Remove[p, v, c, fun, f, g, head, tail];
fun[n_] :=
Table[
Block[
{p, v, c, f, g},
p = Table[RandomChoice[{head, tail}, 2 i + 1], {i, 10}];
v = Count[#, head] & /@ p;
c = Count[#, tail] & /@ p;
f = Abs[v - c];
g = Take[f, LengthWhile[f, # != 3 &] + 1]
],
{n}]
没什么好看的!
答案 3 :(得分:2)
更多Mathematica-ish。没有定义任何变量。
g[n_] := Table[(Abs /@ Total /@
Array[RandomChoice[{-1, 1}, (2 # + 1)] &, 10]) /.
{x___, 3, ___} :> {x, 3},
{n}]
感谢@ Mr.Wizard this answer。
g[2]
->{{1, 1, 1, 5, 5, 1, 5, 7, 3}, {1, 3}}
答案 4 :(得分:0)
我不喜欢讨厌RTFM等,但循环是非常基本的。如果我在文档中心的搜索框中键入“loop”,则前几个命中之一包含指向“guide / LoopingConstructs”页面的链接,其中包含指向教程“tutorial / LoopsAndControlStructures”的链接。你读过这些吗?