看下这个题的思路。

zly361814478 2012-11-28 08:06:20
设有n个球队要进行排球循环赛,设计一个满足以下要求的比赛日程表:
每个球队必须与其他n-1个球队各赛一次;
每个球队一天只能赛一次;
当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。
  n=6的比赛日程表示例(把6个队从1到6进行编号):

  n=5的比赛日程表示例(增加编号0,凡碰0者该天即轮空):


  (1)请根据以上要求分析问题,设计算法,并加以说明;
  (2)编程实现算法,并以n=10和n=15进行测试,输出结果;
(3)分析算法的时间复杂度。
...全文
333 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zly361814478 2012-11-30
  • 打赏
  • 举报
回复
引用 4 楼 luckyc2008 的回复:
比如1,2,3,4,5,6,六只球队,轮转配对,先是1-6,2-5,3-4,接着变成1,6,2,3,4,5,再配对1-5,6-4,2-3,接着变成1,5,6,2,3,4,就是从第二个对整体往后移,最后一个队,放到第二个上面。
想法很不错啊!,比我想的效率高很多···。
luckyc2008 2012-11-30
  • 打赏
  • 举报
回复
比如1,2,3,4,5,6,六只球队,轮转配对,先是1-6,2-5,3-4,接着变成1,6,2,3,4,5,再配对1-5,6-4,2-3,接着变成1,5,6,2,3,4,就是从第二个对整体往后移,最后一个队,放到第二个上面。
luckyc2008 2012-11-29
  • 打赏
  • 举报
回复
public class SaiCheng { 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)
zly361814478 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 luckyc2008 的回复:
public class SaiCheng { private int[] dw = null; public void init(int n){ //是否是偶数队 boolean isOdd = true; //初始化数据 if (n % 2 != 0) { isOdd = false; dw = new int[n + 1]; }……
能说下思路吗, 没看详细
Kaydan 2012-11-29
  • 打赏
  • 举报
回复
1 23456 5 0 2-13456 5 1 3 12456 5 2 4 12356 5 3 5 12346 5 4 6 12345 5 5 30 去掉其中相同的 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 5 30种 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 也是一组 个人想法 难免有错 权当给楼主提供一个思路

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧