欢迎来到天天文库
浏览记录
ID:16546594
大小:31.50 KB
页数:3页
时间:2018-08-22
《循环赛日程表_任意人数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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<<"第"<
此文档下载收益归作者所有