循环赛日程表_任意人数

循环赛日程表_任意人数

ID:16546594

大小:31.50 KB

页数:3页

时间:2018-08-22

循环赛日程表_任意人数_第1页
循环赛日程表_任意人数_第2页
循环赛日程表_任意人数_第3页
资源描述:

《循环赛日程表_任意人数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、/一、问题描述:设有n个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:1.每个选手必须与其他n-1个选手各赛一次;2.每个选手一天只能参赛一次;3.N是偶数时,循环赛在n-1天内结束。N是奇数时,循环赛进行N天.请按此要求将比赛日程表设计成有n行和n-1列(或n列)的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中≤i≤n,≤j≤n-1。二、基本思想(所用数组下标从开始)区分队伍的奇偶情况(奇数时有队伍要轮空)。1.n为奇数时首先,选取前n-1个运动员构建初始对阵关系序列:b(

2、1,n-1,2,n-2,...,i,n-i,...)然后,计算第i天比赛对应的序列:序列b+i(i取值范围为~n)(计算时)序列的每个元素均加i,并且当序列元素加i后如果大于n则将其对n求余序列b+1->序列b+2->......->序列b+n-1->序列b+n第天第天第n-1天第n-1天(比赛时)相邻运动员对阵(即下标,2表示运动员对阵,下标,4表示运动员对阵...),并且在第i天第i号运动员轮空。2.n为偶数时首先,选取前n-1个运动员按照其数情况安排比赛然后,将第n号运动员填入前n-1个运动员比赛安排中的轮空位

3、置,并依据其建立第n行比赛日程安排*/#includeusingnamespacestd;voidodd_table(int**a,intn){inti,j;int*b;//指向对阵关系数组//建立初始对阵关系(,n-1,2,n-2,...,i,n-i)b=newint[n];//0下标不用for(i=1;i<=n/2;i++){b[2*i-1]=i;b[2*i]=n-i;}for(i=1;i<=n;i++)//i控制天数变化{a[i][i]=0;//n为奇数时在第i天第i号运动员轮空for(j=

4、1;j<=(n-1);j+=2){//第i天m1与m2对阵intm1=((b[j]+i)<=n)?(b[j]+i):(b[j]+i)%n;intm2=((b[j+1]+i)<=n)?(b[j+1]+i):(b[j+1]+i)%n;a[m1][i]=m2;a[m2][i]=m1;}}}intmain(){inti,j;//循环控制变量intdays;//比赛天数intn;//参赛队数int**a;//日程表cout<<"请输入运动员人数:";cin>>n;if(n<=1)cout<<"数据非法";else{a=newi

5、nt*[n+1];//行表示运动员days=n%2==0?n-1:n;//比赛天数,n是偶数时,n-1天。n是奇数时,n天.for(inti=1;i<=(n+1);i++)a[i]=newint[days+1];}if(n%2!=0)odd_table(a,n);else{odd_table(a,n-1);//加入第n个运动员的比赛日程,只需将其加入到前n-1个运动员日程中轮空位置即可for(i=1;i<=n;i++)//i控制天数变化{a[i][i]=n;a[n][i]=i;}}//输出表头cout<<"t"

6、;for(j=1;j<=days;j++)cout<<"第"<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。