• 締切済み

テニスの乱数表作成

テニスサークルの合宿のための乱数表を作成したいのですが、 QNo.3199212 のマクロでは対戦相手を考慮していないので、 同じ人と何度も対戦がある人もいれば一度も対戦しない人も出てきてしまいます。 なるべく、全員と対戦するように作り変えたいのですが、 どうかよろしくお願いします。 条件 ・8から14人で ・2つのコート使用で ・同じ人が連続で休まない ・なるべく同じ人とペアを組まない 追加条件 ・全員と対戦したい 合宿は10月10日です。

みんなの回答

  • kitty2008
  • ベストアンサー率31% (58/185)
回答No.5

 #2です。これは乱数ではなく、順列組合わせの問題です。エクセルを使う必要はありません。 図のように、1-14番目の人を 4組合わせずつ(a a A A で二面 合計8名)を順序よく取り出していけば、同じ組合わせは現われず、休み時間もほぼ同じとなります。

回答No.4

リーグ戦の組み合わせが説明されているサイトです。 http://www.bea.hi-ho.ne.jp/ems-ontime/infotext1_8.html 一番したの方にエクセルファイルがリンクされています。 このエクセルファイルを参考にしてみれば、大丈夫ではないかと思われます。 ※一部抜粋(14名の場合) 1 14 2 13 3 12 4 11 5 10 6 9 7 8 1 13 ・ ・ ・ ・ ・ ・ Aコート1試合目 1・14 vs 2・13 Bコート1試合目 3・12 vs 4・11 Aコート2試合目 5・10 vs 6・9 Bコート2試合目 7・8 vs 1・13 ダブルスであれば、上記で望みのものができると思います。 他にも、シェアウェアでソフトもあるようです。 http://www.vector.co.jp/soft/win95/home/se219137.html http://www.vector.co.jp/soft/winnt/home/se450363.html

LaunchMe
質問者

補足

早速のご回答ありがとうございます。 残念ながらEXCELと2つのシェアウエアともには対戦相手を考慮していないと思います。 つまり、ある相手とは何回も対戦するのに、一度も対戦しない人ができてしまいます。 EXCELで手作業で対戦相手を考慮して作成するのには、アップアップ状態で困っています。 よろしくお願いします。

回答No.3

シングルスかダブルスかの条件はどうなってるの?

LaunchMe
質問者

補足

ありがとうございます。 2面でダブルスです。 よろしくお願いします。

  • kitty2008
  • ベストアンサー率31% (58/185)
回答No.2

それだけ条件を付けるのならば乱数で割り振るのは適切ではありません。 8人の場合、組合わせは8×7÷2で28通りしかありません。2面コートがあれば14回分です。 14人でも91通りです。 8x8表あるいは14x14の表を付くって斜め半分からピックアップしていったらよいでしょう。  14人いた場合 「同じ人が連続で休まない」というのは不可能です。

LaunchMe
質問者

補足

説明不足ですみません。 固定のペアーでなく、参加者が試合後とに別の人とペアーになることを想定しています。 例を挙げます。 間違っていたらごめんなさい。 参加人数が10人とすると 10人から2人を取る組み合わせ = 10人から2人を取る組み合わせ 10C2 = 10*9/2 = 45 残りの8人から2人を取る組み合わせ = 10人から2人を取る組み合わせ 8C2 = 8*7/2 = 28 2組が対戦する組み合わせ 45*28 = 1260 つまり1260試合やれば全てのペアが別の全てのペアと対戦することができる。 1260回は不可能なので、1日で行える試合数(30試合程度)を 1260パターンから抽出するようにすればいいのだと思います。 その際に、同じ相手と何度も対戦しないように、休みが均等になるように抽出する。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1
LaunchMe
質問者

お礼

ありがとうございました。 自己解決の記入ができないので、こちらで自己解決の報告をします。 10人から2人を取る組み合わせ = 10人から2人を取る組み合わせ 10C2 = 10*9/2 = 45 残りの8人から2人を取る組み合わせ = 10人から2人を取る組み合わせ 8C2 = 8*7/2 = 28 2組が対戦する組み合わせ 45*28 = 1260 つまり1260試合やれば全てのペアが別の全てのペアと対戦することができる。 1260試合は無理なので、休みが順序よくなるように、対戦相手の重複が2回までとなるように、抽出します。 そのやり方はプログラマでないと無理なのですが、 1260の配列からランダムに抜きだして、だめならやり直し、対戦しない人が0になるまで繰り返します。 その結果を質問の画像に貼り付けました。 そのうちにソフトを公開したいと思います。 ありがとうございました。

LaunchMe
質問者

補足

ありがとうございます。 2つのHPは既に拝見しておりました。 ですが、やはり対戦相手まで考慮されていないと思います。

関連するQ&A