私は実際にしばらく時間をかけて答えをコード化しました。とても楽しい質問です。これを解決する方法はたくさんあります。
- 派手な反復
- 再帰
- チームを飛び出している間の反復
- 別の構造を使用して、チームを処理済みとして「マーク」します
この写真は役立つかもしれません:
0 1 2 3
0 - A A A
1 B - A A
2 B B - A
3 B B B -
このマトリックスのX軸とY軸は、必要な答えを示しています。セットAまたはセットBのいずれかが答えを与えます。マトリックスのダッシュで示されているように、チームが自分でプレーすることは望ましくないことに注意してください。以下は、反復を使用する3つのオプションです。
public class BBall {
public static void main(String args[]) {
List<String> teams = new ArrayList<String>();
teams.add("Boston");
teams.add("LA");
teams.add("New York");
teams.add("Chicago");
teams.add("Dallas");
// This option might be a little easier to read.
int index1 = 0;
System.out.println("Easy to read:");
for (String team1 : teams) {
index1++;
for (int index2 = index1; index2 < teams.size(); ++index2) {
System.out.println(team1 + " plays " + teams.get(index2));
}
}
System.out.println("This is set A:");
for (int x = 1; x < teams.size(); x++) {
for (int y = x - 1; y >= 0; y--) {
System.out.println(teams.get(x) + " plays " + teams.get(y));
}
}
System.out.println("This is set B:");
for (int x = 0; x < teams.size() - 1; x++) {
for (int y = x + 1; y < teams.size(); y++) {
System.out.println(teams.get(x) + " plays " + teams.get(y));
}
}
}
}
出力:
読みやすい:
Boston plays LA
Boston plays New York
Boston plays Chicago
Boston plays Dallas
LA plays New York
LA plays Chicago
LA plays Dallas
New York plays Chicago
New York plays Dallas
Chicago plays Dallas
これはセットAです:
LA plays Boston
New York plays LA
New York plays Boston
Chicago plays New York
Chicago plays LA
Chicago plays Boston
Dallas plays Chicago
Dallas plays New York
Dallas plays LA
Dallas plays Boston
これはセットBです:
Boston plays LA
Boston plays New York
Boston plays Chicago
Boston plays Dallas
LA plays New York
LA plays Chicago
LA plays Dallas
New York plays Chicago
New York plays Dallas
Chicago plays Dallas