之前曾想用C語言寫一個比較公平的亂數產生器,沒想到光是語法就讓我頭昏腦轉了\(;゚Д゚)/
今天想說有點小空閒就來寫看看,幸好PHP很友善,沒兩三下子就搞定了
沒遇到什麼BUG,還順便處理了PHP可能會跳提示的語法,讓errorlog更乾淨ヽ(´ー`)ノ
程式的概念是:先跑一萬次函式,確定random seed已經改變了
然後就依照指示的數字範圍來做亂數,將數字出現的次數存入陣列,最後再利用比較陣列的方式獲得出現次數最多的數字~
<!DOCTYPE html>
<html dir="ltr" lang="zh-TW">
<head>
<meta charset="utf-8">
<title>亂數產生器</title>
</head>
<body>
<?php
if (isset($_POST['run'])) {
$min = $_POST['min'];
$max = $_POST['max'];
/* Initial function */
for ($index = 0; $index < 10000; $index++) {
mt_rand();
}
/* Generate numbers */
$array[] = 0;
for ($index = 0; $index < 10000000; $index++) {
$output = mt_rand($min, $max);
if (isset($array[$output])) {
$array[$output]++;
} else {
$array[$output] = 1;
}
}
/* Find the greatest counter */
$result = $array[$min];
$biggest = $min;
for ($index = $min+1; $index < $max+1; $index++) {
if (isset($array[$index])) {
if ($result = $array[$index]) {
die('Duplicate counter found. Pls restart the generator.');
} else if ($result < $array[$index]) {
$result = $array[$index];
$biggest = $index;
}
}
}
?>
<h1>亂數結果:<?php echo $biggest; ?></h1>
<?php
} else {
?>
<form action="rand.php" method="post" accept-charset="utf-8">
<label>請輸入最小數字</label>
<input type="text" name="min">
<label>請輸入最大數字</label>
<input type="text" name="max">
<button type="submit">送出</button>
<input type="hidden" name="run" value="run">
</form>
<?php
}
?>
</body>
</html>
留言