スレッド表示 | フラット表示〕 全トピック 920 件中 175 番目 次≫ ≪前

ランダムな数字の作り方

created: 2006-10-27 21:15 | modified: 2006-10-28 20:54 | reply: 4

[3430] ランダムな数字の作り方

user: vokls | created: 2006-10-27 21:15
いつもお世話になっております、volksです。

今、8個の数字(1?8)の中から3つの数字をランダムに、そして重複しないように選ぶ方法で悩んでいます。

何か良い方法があれば、ご教授お願い致します。
よろしくお願い致します。
reply: 3432 3435 返信 編集 削除

[3432] Re. ランダムな数字の作り方

user: ゆうじ | created: 2006-10-27 22:52
こんばんわ。毎度です。

1?8のランダムな数字を得るのは rand() を使うとして、
重複しないよう3つ選ぶには、
次の数字を選び出す度に、前の数字と重複してないことを
確かめるしかないと思います。

単純に思いつくのはこんな感じです。

$numbers = array();
while (count($numbers) < 3) {
$num = rand(1, 8);
if (!in_array($num, $numbers)) {
$numbers[] = $num;
}
}

var_dump($numbers);
Parent: 3430  reply: 3434 返信 編集 削除

[3434] 有難うございます

user: vokls | created: 2006-10-28 04:21
ゆうじ様、いつもお世話になってます。
有難うございます。

なるほど!! in_array で確認して順に収めていけば良いのですね!while で (count($numbers) < 3) というのも私の発想にはまったくない切り口でした。
色々と勉強になりました!有難うございます。
Parent: 3432  返信 編集 削除

[3435] 確率を考えると

user: ach | created: 2006-10-28 16:13
$require = 3;
$size = 8;
$nums = array();
for (; $require ; $size--)
{
if (mt_rand(1,$size) <= $require)
{
$require--;
$nums[] = $size;
}
}
これでもいけるはず.
$require << $sizeのときはゆうじさんのコードが有利ですが,
$require ≒ $size >> 1 のときはこちらを使わないとえらいことになります.
Parent: 3430  reply: 3437 返信 編集 削除

[3437] 有難うございます

user: vokls | created: 2006-10-28 20:54
ach 様 有難うございます。

なるほど?、こういう書き方もあるのですね。
ちょっと違った角度からの考え方で、非常に勉強になりました。
確かに確率を考えると、状況によって色々検討する必要がありますね。

for や while の使い方がまだまだ未熟で頭で理解は出来てもそういう発想がまだできないです。
今回はこんなにも早くお返事頂けて助かりました。
有難うございます。
Parent: 3435  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 175 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑