首页 文章

如何用一些中奖号码从锅中挑选随机数?

提问于
浏览
1

我想做一个非常简单的游戏,我有7个位置都是隐藏的,并且在那里有3个获胜位置 . 我可以随机挑选3次 . 我需要在每次选择后显示选择是否获胜并将结果存储在基础中 .

目前我的想法是在第一个选择位置生成一系列中奖号码,然后选择随机数并检查它是否在获胜阵列中 .

但我觉得有更有效的方法可以做到这一点 .

如果您将PHP用于编码示例,将会很感激,但伪代码也可以 .

EDIT 我正在寻找解决这个问题的方法,而不用在胜利阵地中填充阵列 . 也许有一种方法可以用权重或概率百分比来做到这一点 .

像第一顺位一样,我有3/7 * 100%的机会获胜 . 将结果保存到基础 . 在第二顺位,我有3/6 * 100或2/6 * 100%的机会赢得基础天气,我在之前的选择中赢得了我从基地获得的 .

3 回答

  • 0

    修改后的答案:此示例不要求您将游戏的完整状态存储在变量中;相反,你只需要存储尝试计数并赢得计数:

    $won = 0;
    for($try = 0; $try < 3; $try++) {
        $slots = array_fill(0, 7 - $try, 0);  // blank slots
        $lucky = array_fill(0, 3 - $won, 1);  // lucky slots
        $pot = array_replace($slots, $lucky); // make some of the slots lucky
        $win = $pot[array_rand($pot)];        // randomly pick a slot
        $won += $win == 1;                    // update won count
        echo sprintf("Try %d: win=%d, total wins=%d\n", $try + 1, $win, $won);
    }
    

    原始答案:

    $pot = array(               // pot is (an associative) array; 0 = blank, 1 = win
        "pos_1" => 0,
        "pos_2" => 0,
        "pos_3" => 0,
        "pos_4" => 0,
        "pos_5" => 0,
        "pos_6" => 0,
        "pos_7" => 0
    );
    $win = array_rand($pot, 3); // picks three indexes from the pot randomly
    foreach($win as $w) {
        $pot[$w] = 1;           // set winning indicator
    }
    print_r($pot);
    

    输出:包含 jar 状态的数组 .

    Array
    (
        [pos_1] => 0
        [pos_2] => 1
        [pos_3] => 0
        [pos_4] => 1
        [pos_5] => 1
        [pos_6] => 0
        [pos_7] => 0
    )
    
  • 0

    您可以保存中奖号码的位置 . 这样,您始终可以使用 [] 运算符检查数组的值 . 毕竟,你只需选择位置而不是数字 .

    Update: 这样你甚至不可能有更抽象的"winning things" - 字符,单词,结构 . 但是,重要的是不要以任何方式更改隐藏的"things"数组,或者至少更新存储的获胜位置(如果它们保持不变) . 如果's not the case you' d自然需要更新已保存的获胜位置 .

  • 1
    <?php 
    
    $arr = array(true, true, false, false, false, false, false);
    shuffle($arr);
    
    function pick($arr, $index) {
        return isset($arr[$index]) && $arr[$index] === true;
    }
    
    var_dump($arr);
    var_dump(pick($arr, 3));
    var_dump(pick($arr, 5));
    var_dump(pick($arr, 1));
    

相关问题