蜘蛛抱蛋 发表于 2010-11-26 11:46:07

关于模拟抽奖

本帖最后由 蜘蛛抱蛋 于 2010-11-26 12:35 编辑

问题很简单,某某节目上,一嘉宾猜测某奖品价格,规定次数内猜中就可以把奖品抱回家。如何才能使胜率最大?
下面是两种方法比:$p = InputBox("真实", "输入整数", "640", " M3")
$t = InputBox("价格区间", "输入两个整数作为最初的价格范围,用空格间隔开", "0 800")
$price = StringSplit($t, Chr(32), 2)
Dim $i = 0,$try = 0,$try2 = 0
While $try <> $p;每次取平均值
        $i += 1
        If BitAND($price+$price, 1) = 1 Then
          $try = Int(($price + $price)/2)+Random(0,1,1)
    Else
          $try = Int(($price + $price)/2)
EndIf

        ConsoleWrite($try & Chr(32))
        If $try>$p Then
        ConsoleWrite("高了" & @CRLF)
        $price = $try
        EndIf
        If $try<$p Then
        ConsoleWrite("低了" & @CRLF)
        $price = $try
        EndIf
WEnd
MsgBox(0,"答对了","共猜" & $i & "次")

While $try2 <> $p;完全随机
        $i += 1
    $try2 = Random($price, $price, 1)
        ConsoleWrite($try2 & Chr(32))
        If $try2>$p Then
        ConsoleWrite("高了" & @CRLF)
        $price = $try2
        EndIf
        If $try2<$p Then
        ConsoleWrite("低了" & @CRLF)
        $price = $try2
        EndIf
WEnd
MsgBox(0,"答对了","共猜" & $i & "次")问题变化一下,猜价格改为抽奖,只有两次机会,第一次猜完,主持人从剩余的箱子去掉一个错误答案。此时,你可以选择换一个猜,或者不换。那么得奖的概率是否有所不同?
**** Hidden Message *****

蜘蛛抱蛋 发表于 2010-11-26 12:02:37

第二个代码运行的很卡,得出结果用了30多秒,各位能看看是哪儿出了问题吗

3mile 发表于 2010-11-26 14:13:41

二分法解决应该效率最高吧。

menfan1 发表于 2010-11-27 10:18:47

呵呵挺有意思哈

shenrenba 发表于 2010-11-27 11:38:51

让别人猜应该这样写吧 你这是电脑猜了$p = InputBox("真实", "输入整数", "640")
$i = 0
While 1
        $t = InputBox("价格", "请输入你认为的价格", "")
        $i += 1
        If $t < $p Then _TrayTip("低了")
        If $t > $p Then _TrayTip("高了")
        If $t = $p Then
                MsgBox(0, "答对了", "共猜" & $i & "次!")
                ExitLoop
        EndIf
        If $i > 10 Then
                MsgBox(0, "很可惜", "您10次都没猜中!")
                ExitLoop
        EndIf
WEnd

Func _TrayTip($info)
        TrayTip("您输入的价格和真实价格相比", $info, 3)
EndFunc   ;==>_TrayTip

yzh016 发表于 2010-12-12 12:46:02

顶一个
先看看,能不能用

zmdzhxj 发表于 2019-10-20 14:49:45

看看隐藏的什么
页: [1]
查看完整版本: 关于模拟抽奖