设有n个球队要进行排球循环赛,设计一个满足以下要求的比赛日程表:
每个球队必须与其他n-1个球队各赛一次;
每个球队一天只能赛一次;
当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。
n=6的比赛日程表示例(把6个队从1到6进行编号): n=5的比赛日程表示例(增加编号0,凡碰0者该天即轮空):
(1)请根据以上要求分析问题,设计算法,并加以说明;
(2)编程实现算法,并以n=10和n=15进行测试,输出结果;
(3)分析算法的时间复杂度。
每个球队必须与其他n-1个球队各赛一次;
每个球队一天只能赛一次;
当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。
n=6的比赛日程表示例(把6个队从1到6进行编号): n=5的比赛日程表示例(增加编号0,凡碰0者该天即轮空):
(1)请根据以上要求分析问题,设计算法,并加以说明;
(2)编程实现算法,并以n=10和n=15进行测试,输出结果;
(3)分析算法的时间复杂度。
解决方案 »
- 求助,导出数据库二进制内容为本地图片文件显示红叉??
- 关于XML文档如何从网页中提取内容
- 100分 求高人编个 提取搜狐社区某个网页下的所有图片链接 的程序
- spring 教材的选购?
- JBPM求救
- 【初学者50分求】在Jcreator中运行一sqlserver数据库时出现的错误(能编辑,但连不上)?
- 如何将xml的文档生成.xml文件
- 回答有分,初学(tomcat5.0)
- 怎么样保存登陆在线状态啊,用session不能随处访问,怎么办啊~~~~~~~~~急急急,help~~~~~~~
- 菜菜鸟问题!xml和xsl文件下载后怎么浏览啊
- java数据库操作方法是否要加线程锁
- 关于ArrayList
private int[] dw = null;
public void init(int n){
//是否是偶数队
boolean isOdd = true;
//初始化数据
if (n % 2 != 0) {
isOdd = false;
dw = new int[n + 1];
} else {
dw = new int[n];
}
int len = dw.length; if (isOdd) {
for (int i = 0; i < len; i++) {
dw[i] = i + 1;
//System.out.println(dw[i]);
}
} else {
for (int i = 0; i < len; i++) {
dw[i] = i;
//System.out.println(dw[i]);
}
}
}
public void printSc()
{
int len = dw.length;
//逆时针轮换
for(int i = 0; i < len -1; i++){
System.out.println("第"+(i+1)+"天");
for(int j= 0 ;j< len/2;j++)
{
System.out.println(dw[j] + "--" + dw[len - 1 - j]);
}
//把数组元素从第三位开始往后移,第二位设成最后一个值
int last = dw[len -1];
for(int k=len-1;k>1;k--)
{
dw[k]= dw[k-1];
}
dw[1] = last;
}
}
public static void main(String[] args) {
SaiCheng sc = new SaiCheng();
sc.init(10);
sc.printSc(); }}
O(n^2)
1 23456 5 0
2-13456 5 1
3 12456 5 2
4 12356 5 3
5 12346 5 4
6 12345 5 530 去掉其中相同的 5+4+3+2+1 种 15种不同的 每天的比赛 随即取15个中的3个 当为奇数是
0 12345 0
1 02345 1
2 01345 2
3 01245 3
4 01235 4
5 01234 530种 15种 如上 每天去三个随即组合 n 为偶数
1 2--n-1 0
2 13--n-1 1
3 124--n-1 2
4 1234--n-1 3
5 12346--n-1 4
n 123456--n-1 n-1总共sum=n*(n-1) 重复的z=1+2+3+4+...(n-1) 个 每天随机取 (sum-z)/(n-1) 个 定义一个二位数组a[n-1][n-1] 列
0 1 2 3 4 5 6 7 8 9 n-1行 0 1 2 3 4 5 6 7 8 9 n-1 n
1 2 1 3 4 5 6 7 8 9 n-1 n
2 3 1 2 4 5 6 7 8 9 n-1 n
3 4 1 2 3 5 6 7 8 9 n-1 n
4 5 1 2 3 4 6 7 8 9 n-1 n
5 6 1 2 3 4 5 7 8 9 n-1 n
6 7 1 2 3 4 5 6 8 9 n-1 n
7 n 1 2 3 4 5 6 7 8 9 n-1 a[0][0]=1 a[0][1]=2 a[0][2]=3 a[0][n-1]=n
a[1][0]=2 a[1][1]=1 a[1][2]=3当 a[][] 行数=列数的时候 删除 行数和列数同时自增
a[x][y] 当x=y时 删除 a[0][0] 到a[x][y]的数据、 剩下的数组中 不为空的a[x][y]
列
0 1 2 3 4 5 6 7 8 9 n-1行 0 0 2 3 4 5 6 7 8 9 n-1 n
1 0 0 3 4 5 6 7 8 9 n-1 n
2 0 0 0 4 5 6 7 8 9 n-1 n
3 0 0 0 0 5 6 7 8 9 n-1 n
4 0 0 0 0 0 6 7 8 9 n-1 n
5 0 0 0 0 0 0 7 8 9 n-1 n
6 0 0 0 0 0 0 0 8 9 n-1 n
7 0 0 0 0 0 0 0 0 8 9 n-1 a[0][1] a[0][2] a[0][3]
a[1][2] a[1][3] a[1][4]
a[2][3] a[2][4] a[2][5]
a[3][4] a[3][5] a[3][6]
a[4][5] a[4][6] a[4][7]1-2 1-3 1-4
2-3 2-4 2-5
3-4 3-5 3-6
4-5 4-6 4-7
5-6 5-7 5-8
......
每天的 随即组合中 x!=y 1-2 3-5 4-6 就是其中一组
1-3 2-4 5-6 也是一组个人想法 难免有错 权当给楼主提供一个思路