创建一个无需重复分配团队的程序?
Creating a program that will assign teams without duplication?
我想创建一个程序,分配 six
个团队每 three
天互相比赛一次。但我也希望每支球队每天都打 two
场比赛。我不希望他们在同一 three
天内扮演同一个人两次。
我需要将每个游戏按 two
分组并随机化。将同时进行两场比赛。
这是所需的输出:
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 |
不需要完全像这样格式化,但这只是一个大概的想法。
首先,我想让它循环三次,但我想确保它不会分配一个数字,如果这个数字已经在这个循环序列中使用过的话。
我相信代码应该是这样的:
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 天分配相同的号码。
-团队列表需要随机化并按两个分组。
我不太确定如何解决这些问题。任何帮助将不胜感激。
使用两个循环。一个在另一个里面。循环形成这个形状的三角形:
你只需要白色三角形。每个细胞都是一个游戏。白色三角形是可以玩的每一个独特的游戏。请记住不要包括对角线,否则球队将与自己比赛。对于 6 支球队,您应该可以玩 15 种独特的游戏。更一般地说:g = n(n-1)/2
编写一个游戏 class,需要两支队伍并为每个单元格创建一个。对该列表进行排序,您可以尽可能地发挥独特性。
以下是一些可能的组合。如果您不需要分配是随机的或每次都不同,您可以始终使用最后一个示例。否则,我认为如果您创建 6 个数组然后一次填充一列,那么您就会得到它。如果没有更多可用的有效分配,我有时不得不返回并更改同一列中的先前分配,因此您的算法可能也需要这样做。如果这还没有意义,那么我建议您自己写出更多的团队分配组合,以便更直观地了解问题。
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
我想创建一个程序,分配 six
个团队每 three
天互相比赛一次。但我也希望每支球队每天都打 two
场比赛。我不希望他们在同一 three
天内扮演同一个人两次。
我需要将每个游戏按 two
分组并随机化。将同时进行两场比赛。
这是所需的输出:
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 |
不需要完全像这样格式化,但这只是一个大概的想法。
首先,我想让它循环三次,但我想确保它不会分配一个数字,如果这个数字已经在这个循环序列中使用过的话。
我相信代码应该是这样的:
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 天分配相同的号码。
-团队列表需要随机化并按两个分组。
我不太确定如何解决这些问题。任何帮助将不胜感激。
使用两个循环。一个在另一个里面。循环形成这个形状的三角形:
你只需要白色三角形。每个细胞都是一个游戏。白色三角形是可以玩的每一个独特的游戏。请记住不要包括对角线,否则球队将与自己比赛。对于 6 支球队,您应该可以玩 15 种独特的游戏。更一般地说:g = n(n-1)/2
编写一个游戏 class,需要两支队伍并为每个单元格创建一个。对该列表进行排序,您可以尽可能地发挥独特性。
以下是一些可能的组合。如果您不需要分配是随机的或每次都不同,您可以始终使用最后一个示例。否则,我认为如果您创建 6 个数组然后一次填充一列,那么您就会得到它。如果没有更多可用的有效分配,我有时不得不返回并更改同一列中的先前分配,因此您的算法可能也需要这样做。如果这还没有意义,那么我建议您自己写出更多的团队分配组合,以便更直观地了解问题。
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