单循环赛日程表.doc

上传人:桔**** 文档编号:543092818 上传时间:2023-07-09 格式:DOC 页数:3 大小:71.01KB
返回 下载 相关 举报
单循环赛日程表.doc_第1页
第1页 / 共3页
单循环赛日程表.doc_第2页
第2页 / 共3页
单循环赛日程表.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《单循环赛日程表.doc》由会员分享,可在线阅读,更多相关《单循环赛日程表.doc(3页珍藏版)》请在金锄头文库上搜索。

1、题目:循环赛日程表设计一个满足一下要求的比赛日程表(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能赛一次;(3)若才赛选手为偶数,循环赛一共进行n-1天;若参赛选手为奇数循环赛一共进行n天。 主要思想:“贝格尔”编排法,其优点是单数队参加时可避免第二轮的轮空队从第四轮起每场都与前一轮的轮空队比赛的不合理现象。方法如下:所谓贝格尔编排法,第一轮开始的编排同传统方法一样,假设现在有7个队参加单循环,分别抽签成为1-7队,由于贝格尔编排法必须是双数队,所以再加一个0队,与0队比赛表示该队轮空,现在必须定下一个数为参照数,因此我们假设0为参照数(任意数都可以,一般取0或者最大数),

2、第一轮的对阵形式如下:1 02 73 64 5这个大家都能看明白,这跟贝格尔编排法无关,第二轮则开始相关了。在第一轮中,0在右边,现在我们要在第二轮让它换成左边,第三轮又让它换回右边,反反复复,到最后一轮即第七轮时,它还是在右边。我们把0安排好后,再把第一轮右下角的5提到右上角来,因此第二轮的第一场比赛就变成:0 5然后我们还要回到第一轮的八个数字来,我们假设它是一个环,无论是顺时针还是逆时针,它们的位置是相对固定的(除了它们与0的位置有时候会改变外,因为0的位置是先定好的),比如按照顺时针方向看,5的前面是6,后面是4,因此,第二轮我们还是安排5的前面是6,后面是4,0我们假设它不存在,于是

3、第二轮的第一、二场比赛就是:0 56 4那其他怎么办呢,照旧轮呗,就像排球的轮转一样,于是第二轮就是0 56 47 31 2其他依次类推。无论比赛队是单数还是双数,最后一轮时,必定是“0”或最大的一个代号在右上角,“1”在右下角。根据参赛队的个数不同,应按规定的间隔数移动(见表)。间隔移动参赛队数间隔数轮转次数4队以下0156队1278队23910队341112队45图一顺时针旋转3个位置81234765图二84567321根据上面所讲,我们可以得到如下模型:将参赛选手(以7人为例,8为虚拟选手),按图一排列,根据连线进行比赛,得第一天比赛安排,然后将除8外的数字按顺时针(或逆时针旋转,此时n

4、取8)n/2-1个位置,如图二,即得第二天的比赛安排,以此类推,直至第n-1天,比赛完成。(采用C语言代码)代码如下:#include#define MAXSIZA 32/最大参赛队伍个数void main()int m,n,i;int aMAXSIZAMAXSIZA;/用于日程表存储/输入处理printf(请输入参赛队伍个数(2-%d):,MAXSIZA);scanf(%d,&m);while(mMAXSIZA | m2)printf(输入数据有误,请重新输入参赛队伍个数(2-%d):,MAXSIZA);scanf(%d,&m);/奇数个选手,虚拟一个选手,使之成为偶数n=m+m%2;/给选

5、手编号,存储在数组第一列for(i=0;in;i+)ai0=i+1;/生成日程表,将比赛安排存储在数组中for(i=1;in;i+)for(int j=0;jn/2;j+)aaj0-1i=a(n-1-j)%n0;aa(n-1-j)%n0-1i=aj0;/将数组第一列按将除n外的选手按顺时针(或逆时针旋转)n/2-1个位置 int k=0,t;t=ak0;for(;kn-2;k+)a(k*(n/2-1)%(n-1)0=a(k+1)*(n/2-1)%(n-1)0;a(k*(n/2-1)%(n-1)0=t;for(i=0;in;i+)/输出表头if(i=0)printf(队号t);elseprintf(第%d天t,i);printf(n); for(i=0;im;i+)/输出日程表for(int j=0;jn;j+)if(m!=n & aij=n)/用输出-表示轮空printf( -t);elseprintf( %dt,aij);printf(n);运行结果如下:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号