2

sixチームを毎日 1 回対戦するように割り当てるプログラムを作成しようとしていますthree。でも、各チームにはtwo毎日試合をしてもらいたいです。同じ期間に同じ人物を 2 回プレイしてほしくありませんthree

各ゲームをグループ化しtwoてランダム化する必要があります。一度に2つのゲームがプレイされます。

目的の出力は次のとおりです。

Day 1:             Day 2:             Day 3:

 Team 1 -> Team 6 | Team 1 -> Team 4 | Team 1 -> Team 2
 Team 2 -> Team 5 | Team 2 -> Team 3 | Team 3 -> Team 4
 ________________ | ________________ | ________________
                  |                  |
 Team 3 -> Team 1 | Team 3 -> Team 6 | Team 5 -> Team 6
 Team 4 -> Team 2 | Team 4 -> Team 5 |
 ________________ | ________________ |
                  |                  |
 Team 5 -> Team 4 | Team 5 -> Team 1 |
 Team 6 -> Team 3 | Team 6 -> Team 2 |

このように正確にフォーマットする必要はありませんが、これは単なる一般的な考え方です。

まず、3回ループするようにしたいのですが、この一連のループで既に番号が使用されている場合は、その番号を割り当てないようにしたいと考えています。

コードは次のようになると思います。

Integer[] teams = new Integer[6];

  for (int i = 0; i < 6; i++) {
     teams[i] = i + 1;
  }

  for (int i = 0; i < 3; i++) {
     Collections.shuffle(Arrays.asList(teams)); 

     System.out.printf("Team 1 -> %s%n", teams[0]);
     System.out.printf("Team 2 -> %s%n", teams[1]);
     System.out.printf("Team 3 -> %s%n", teams[2]);
     System.out.printf("Team 4 -> %s%n", teams[3]);
     System.out.printf("Team 5 -> %s%n", teams[4]);
     System.out.printf("Team 6 -> %s%n", teams[teams.length - 1]);

     System.out.println("____________");
     System.out.println();
     System.out.println();
  }

このコードで得られる出力は次のとおりです。

Day 1
Team 1 -> 6
Team 2 -> 2
Team 3 -> 1
Team 4 -> 5
Team 5 -> 4
Team 6 -> 3
____________


Day 2
Team 1 -> 2
Team 2 -> 4
Team 3 -> 1
Team 4 -> 5
Team 5 -> 3
Team 6 -> 6

これに関する問題は次のとおりです。

- 3 番がチーム 5 に割り当てられた場合、5 番は後で 3 番に割り当てられるべきではありません。

・チーム1に背番号1を割り当てることはできません。

- チーム 4 が 1 日目に 5 番を割り当てられた場合、2 日目または 3 日目に同じ番号が割り当てられるべきではありません。

-チームのリストは、ランダム化して 2 つにグループ化する必要があります。

これらの問題を解決する方法がよくわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

2 つのループを使用します。もう一方の内側。ループして次の形状の三角形を形成します。

ここに画像の説明を入力

白い三角形だけが必要です。各セルはゲームです。白い三角形は、プレイできるすべてのユニークなゲームです。対角線を含めないでください。そうしないと、チームが自分自身と対戦することになります。6 チームでプレイできる 15 のユニークなゲームを取得する必要があります。より一般的には: g = n(n-1)/2

2 つのチームを取り、セルごとに 1 つのゲーム クラスを作成します。そのリストを並べ替えると、可能な限りユニークにプレイできます。

于 2015-04-06T18:41:19.940 に答える
1

いくつかの可能な組み合わせを次に示します。割り当てを毎回ランダムまたは異なるものにする必要がない場合は、常に最後の例を使用できます。それ以外の場合は、6 つの配列を作成してから一度に 1 つの列を埋めると、それが得られると思います。利用可能な有効な割り当てがなくなった場合、同じ列の以前の割り当てに戻って変更する必要があったため、アルゴリズムでそれを行う必要がある場合もあります。これがまだ意味をなさない場合は、より直観的に問題を理解できるように、チーム割り当ての組み合わせを自分で書き出すことをお勧めします。

1 >> 2, 3, 4, 5, 6
2 >> 1, 4, 5, 6, 3
3 >> 5, 1, 6, 4, 2
4 >> 6, 2, 1, 3, 5
5 >> 3, 6, 2, 1, 4
6 >> 4, 5, 3, 2, 1

1 >> 2, 3, 4, 5, 6
2 >> 1, 5, 6, 4, 3
3 >> 4, 1, 5, 6, 2
4 >> 3, 6, 1, 2, 5
5 >> 6, 2, 3, 1, 4
6 >> 5, 4, 2, 3, 1

1 >> 6, 5, 4, 3, 2
2 >> 1, 6, 5, 4, 3
3 >> 2, 1, 6, 5, 4
4 >> 3, 2, 1, 6, 5
5 >> 4, 3, 2, 1, 6
6 >> 5, 4, 3, 2, 1
于 2015-04-06T18:56:34.313 に答える