教えて!gooにおける不適切な投稿への対応について

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

合宿は10月10日です。

「テニスの乱数表作成」の質問画像
gooドクター

A 回答 (5件)

 #2です。

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

リーグ戦の組み合わせが説明されているサイトです。


http://www.bea.hi-ho.ne.jp/ems-ontime/infotext1_ …
一番したの方にエクセルファイルがリンクされています。
このエクセルファイルを参考にしてみれば、大丈夫ではないかと思われます。

※一部抜粋(14名の場合)
114
213
312
411
510
69
78
113
・・
・・
・・
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 …
http://www.vector.co.jp/soft/winnt/home/se450363 …

この回答への補足

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

補足日時:2009/10/01 11:42
    • good
    • 1

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

この回答への補足

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

補足日時:2009/10/01 11:40
    • good
    • 1

それだけ条件を付けるのならば乱数で割り振るのは適切ではありません。


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

この回答への補足

説明不足ですみません。
固定のペアーでなく、参加者が試合後とに別の人とペアーになることを想定しています。
例を挙げます。
間違っていたらごめんなさい。
参加人数が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パターンから抽出するようにすればいいのだと思います。
その際に、同じ相手と何度も対戦しないように、休みが均等になるように抽出する。

補足日時:2009/10/01 15:23
    • good
    • 0

この回答への補足

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

補足日時:2009/10/01 15:21
    • good
    • 0
この回答へのお礼

ありがとうございました。
自己解決の記入ができないので、こちらで自己解決の報告をします。

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になるまで繰り返します。
その結果を質問の画像に貼り付けました。
そのうちにソフトを公開したいと思います。
ありがとうございました。

お礼日時:2009/10/07 10:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング