プロが教えるわが家の防犯対策術!

テニスの大会でトーナメント表を作ります。
エントリーがまだなので出場者数が分からないのですが
任意の出場者に対して第8シードまでを考慮した両面トーナメント表を描画するプログラムを作りたいです

VBAで書く予定なのですが、選手名はともかく、任意数の入力に対して第8シードまでを考慮した木を導くアルゴリズムがどうしてもわかりません(T_T)

何か良い方法はないですか??
みなさんの知恵を貸してください!

質問者からの補足コメント

  • ごめんなさい!
    最大でエントリー数は256名にしようと思ってます。
    毎回120くらいの大会なので、余裕を持たせたいです!

      補足日時:2016/06/14 15:39

A 回答 (3件)

#2です。


早速の補足ありがとうございます。

とてもじゃないですが、実際のコードを書くことは無理がありますので、基本的な考え方を書きます。

まず、8名のシード以外をA~H組へ8分割します。ここでポイントになるのは各組が偶数になるように調整する事です。
調整するとき、B F G C D E H Aの順に多く割り当てるようにします(たとえば各10名で、2グループ12名ならBとFを12名にする)。
もし、全部のグループを偶数にできなかったら、Bグループに第9シード的に入れます。
そして、シード選手を第1から順に(上の調整順とは逆に)A H E D C G F Bと入れていきます(つまり第1シードはA 第2シードはH・・・・第8シードはB)。

あとは

A            E
 >         <
B  >     <   F
 >   > <   <
C  >     <   G
 >         <
D            H  

という感じにすればいいのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

シードの属するブロックになるべく偶数になるように分けていって、奇数になってしまったら実質的なシードを増やすわけですね!

早速実践してみます!

お礼日時:2016/06/14 16:21

回答に必要な情報が足りないようです。



・VBAはExcelですか
・シードは2回戦からですか
・人数によるトーナメント表作成の仕様ははっきりしていますか

出場者が 2n+8名 (n>7) ならばきれいにトーナメント表を作ることができるはずです。
やってみれば分かるかと思いますが、この条件で最少人数は24名です。
そのうち8名がシードなので、残り16人を一回戦でぶつけて勝ち残った8選手をシード8名と対戦するようにすればいいわけです(シードが全員2回戦からの場合)。
しかし、実際はそううまくはいきませんよね。
22名だった場合、どうするのでしょうか。
25名だった場合、どうするのでしょうか。
ほかにも、3回戦で第一シードと第二シードが当たってはいけないとか、第三シードまでは3回戦から出場とか、いろんな条件(仕様)があると思うのですが、そういったことは把握されていますか?
それを示さない限り適正なアルゴリズムは作れないでしょう。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます!

おっしゃっていた情報の補足です
・エクセルで作って使用するのが選手の入力も一括で出来るので楽かなと思ってます
・シードは1回戦のみ免除なので2回戦からの予定です
・人数による仕様は100名を超えることが予想されるので少なすぎることはないと思います、というかあって欲しくないですね(^^;)
 また、第1シードと第2シードが(順当に勝ち進んだ場合)当たるのは決勝戦というようなオーソドックスな仕様にする予定です

お礼日時:2016/06/14 15:54

アルゴリズムを考えるのは良いことかもしれませんが、この件に関しては実践的な使い方ではありませんね。


エントリ数が決まってから振り分けを考えても良いと思います。
実際の人数に合わせて振り分けることを考えればよいので楽ですよ。

要は「今考えてもはじまらない」です。
(だってさ、全体で何人くらい出場するのかすら質問文にないんだぜ。…第8シードから大体の予測は付くが…。全体で何回戦あるのかすら不明なんだ。どうしろってのw)
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

エントリーは毎回120前後なので128超えることも見越してMAXで256名にしようかなって思ってます
ご指摘ありがとうございますm(__)m

お礼日時:2016/06/14 15:38

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