比赛日程安排(JAVA实现)
题目是这样的
1、 设有n个球队要进行排球循环赛,设计一个满足以下要求的比赛日程表:
a) 每个球队必须与其他n-1个球队各赛一次;
b) 每个球队一天只能赛一次;
c) 当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。
n=6的比赛日程表示例(把6个队从1到6进行编号):
n=6的比赛日程表
第一天 | 第二天 | 第三天 | 第四天 | 第五天 |
1~2 | 1~3 | 1~4 | 1~5 | 1~6 |
3~5 | 2~4 | 2~5 | 2~6 | 2~3 |
4~6 | 5~6 | 3~6 | 3~4 | 4~5 |
n=5的比赛日程表示例(增加编号0,凡碰0者该天即轮空):
n=5的比赛日程表
第一天 | 第二天 | 第三天 | 第四天 | 第五天 |
1~0 | 1~5 | 1~4 | 1~3 | 1~2 |
2~5 | 0~4 | 5~3 | 4~2 | 3~0 |
3~4 | 2~3 | 0~2 | 5~0 | 4~5 |
我的思路是这样的:
代码示例如下:
package com.abin;
import java.util.LinkedList;
public class GamePlan {
private int num; // 队伍数
private LinkedList<Integer> list = new LinkedList<Integer>();
public GamePlan(int n)
{
this.num = n;
init();
}
private void init()
{
if (num % 2 == 0) //偶数个队伍
{
for (int i = 0; i < num; i++)
{
list.add(i + 1);
}
}
else //奇数个队伍
{
for (int i = 0; i < num; i++)
{
list.add(i + 1);
}
list.add(0);
}
}
public void print()
{
for (int i = 0; i < list.size() - 1; i++)
{
System.out.println("第" + (i + 1) + "天");
for (int j = 0; j < list.size() / 2; j++)
{
System.out.println(list.get(j) + "--"
+ list.get(list.size() - 1 - j));
}
int temp = list.pollLast(); //获取最后一个元素
System.out.println(list.get(1));
list.add(1, temp);//将最后一个元素放在List的第二个位置
}
}
}
package com.abin;
public class GamePlanShow {
public static void main(String[] args) {
//实例化GamePlan对象
GamePlan t = new GamePlan(6);
t.print();
}
}