
No.5ベストアンサー
- 回答日時:
この問題、一般人には厳しいですね。
考え方としては、「あらかじめカードを作成しておき、それを一枚ずつ出す」というので正解だと思います。
で、カードの重複しない作成ですが、ビンゴカードが5×5で真中がフリーの24の数字とします(本当は1行目は1~20までの数字とか決まりがあるんだと思うけど、よく知らないので無視します)。
○99の数字から24個を抽出
○24個をランダムに並べる(順列)
という手続きだと思います。
順列を作るプログラムは参考URLを参照していただくとして、問題は組合せですね。ちょっとサンプルが発見できませんでした。
ちょっとアルゴリズムに詳しい人なら、簡単に書けるような気がするんですが、私には無理です。すみません。
なんかヒントになるといいのですが。
参考URL:http://www2.tech-unet.ocn.ne.jp/PerlMania2nd/per …
No.4
- 回答日時:
補足見ました。
ダブりのない完全乱数を自動的に生成するのは、コンピュータが「計算機」である以上、実質不可能です。
コンピュータに任せられないのであれば自分で作るしかありません。
ですがある程度、でよければ、ランダムシードと呼ばれる数値をこちら側で制御してあげればOKです。
ランダムシードはPerlでは、関数srandに渡す値のことです。関数srandは、関数randから返ってくるランダム値の値の順番を初期化します。
ですから、以前使用したランダムシードを二度と使わないようにすれば、同じ順序のランダムがもう一度発生することはありません。
通常は
srand(time);
で充分ですが、これで足りないのであればこちら側でランダムシードに渡す順序をファイルか何かに格納しておけばいいでしょう。
なお、それでも不安だということであれば、1つ1つ比較するしかありません(チェックサム方式でよければそれも1つの手ですが)。
No.3
- 回答日時:
通常、重複のない複数の乱数を発生する場合は、次のようなルーチンを組みます。
for ( $i = 0; $i < 10; $i++ ) {
retry:
$table[$i] = int(rand(100));
for ( $j = 0; $j < $i; $j++ ) {
if ( $table[$i] == $table[$j] ) {
goto retry;
}
}
}
こうすれば、配列変数@table[1..10]に重複のない0~99の数字を入れることができます。
また、CGIの場合、この数字を保存したり他の利用者と共有するにはファイルを使います。
その昔、コンピュータがまだ8ビットだった頃からこの手法を使っていましたが、これで重くなったという話は聞いたことがありません(^_^;
ですからこの方法で特に問題ないと思います。
ご回答ありがとうございます。
今回、質問しているのは、番号の重複というより、番号の並びの重複を避ける方法が知りたいのです。(質問がわかりづらくてすみませんでした。)
乱数を利用して、番号の並びを変えても、必ず並びが重複しない!とは言い切れませんし…。
なにか良い方法がありましたら、よろしくお願いいたします。
No.1
- 回答日時:
作り置きしてあるカードをダブらないように配付するのは別に負荷なんかかからないように思うのですが、どんなもんでしょう?
ご回答、ありがとうございます。
確かにあらかじめカードを作っておけば、番号の並びがだぶらないカードを配布する事はできるのですが、その肝心の「番号の並びがだぶらないカード」を作る方法がよくわからないので、困っています…。
乱数を利用して、番号の並びを変えても、同じ並びのカードができないとは言い切れないですし…。(やっぱり、多少のだぶりは仕方ないのかな?)
なにか良い方法(アルゴリズム)がありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
血液検査の結果が悪くefgrの値...
-
小数点以下を繰り上げたものを...
-
リンク先のファイルを開かなく...
-
透亮像について。 先日会社の健...
-
excelでsin二乗のやり方を教え...
-
excel関数で TRUEやFALSEについて
-
イタリアから帰国する際、肉製...
-
【エクセル】0以外が入力され...
-
MIN関数で空白セルを無視したい...
-
Excel 0目標に対して数字があ...
-
「内数」という言葉の意味がよ...
-
ワードのページ番号をもっと下...
-
値が入っているときだけ計算結...
-
Excel 数値の前の「 ' 」を一括...
-
WORDで複数語句を検索するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報