1000个人抽奖 1等级2人 2等级4人 三等奖10人

来源:互联网 发布:淘宝宝贝打不开 编辑:程序博客网 时间:2024/05/03 10:16

<?php//面试被问到的一个题目:1000个人抽奖  1等奖2人  2等奖4人 三等奖10人  //思路 循环1000个人的数组//每个人从奖券池中取一个数,如果这个数在 1,2,3,则代表中奖,取出后从奖券池中删除该奖券$allNums = 1000; //总人数$configs = ['1' => ['nums' => 2, 'owns' => []],'2' => ['nums' => 4, 'owns' => []],'3' => ['nums' => 10, 'owns' => []],];$allPages = []; //全部奖券foreach ($configs as $k => $v) {$arr[$k] = $v['nums'];for($i = 0; $i< $v['nums']; $i++){//向奖券池里面填充2个1等奖 4个2等奖 10个三等奖array_push($allPages, $k);}}$left = $allNums - array_sum($arr);for($i = 0; $i< $left; $i++){array_push($allPages, 0);//填充其他奖}shuffle($allPages);//打乱数组$wins = []; //获奖者数组for($i=0; $i< $allNums; $i++){$index = array_rand($allPages); //随机抽一张奖券 array_rand获取键$page = $allPages[$index];//通过键 获取值if(in_array($page, [1, 2, 3])){ //如果中奖$configs[$page]['owns'][] = $i;$wins[] = $i;//$wins[] = $random;}unset($allPages[$index]); //不管是否中奖 删除该奖券shuffle($allPages);//重新打乱奖券if(count($wins) >= 16){//如果已经诞生了16个得奖者 结束循环//echo '循环'.$i.'次';break;}}echo '<pre>';print_r($configs);echo '</pre>';


0 0