1

特定の数のプレーヤーに対して、ラウンド ロビン トーナメント スケジュール (すべてのプレーヤーが他のすべてのプレーヤーと対戦する) を作成するプログラムを作成しようとしています。
リストだけを使用してこれを行う方法があるかどうか疑問に思っていました。itertools.combinations() を使用しないようにしています

プレーヤーの数を入力してそれらのプレーヤーのリストを生成できるプログラムがある場合、これを行う方法を誰か考えてもらえますか? 例: 4 人のプレーヤーがリスト [1,2,3,4] を生成します。

印刷するプログラムが必要です:

ラウンド 1: 1 対 4 2 対 3

ラウンド 2: 1 対 3 4 対 2

ラウンド 3: 1 対 2 3 対 4

4

1 に答える 1

2

ここで説明した最初のアルゴリズムの簡単な実装を次に示します

N = 6
a = range(N)
for i in xrange(N-1):
    print zip(a[:N/2], reversed(a[N/2:]))
    a = a[:1] + a[-1:] + a[1:-1]

編集:実際には、指摘されているように、奇数でも機能しNます。

(ORIG: これNは が偶数の場合にのみ機能します。リンクでは、奇数をサポートするように拡張する方法が説明されていNます。)

于 2013-03-12T20:51:57.487 に答える