【问题描述】
业余球类比赛通常根据参赛队伍的多少均分为4-8组(每组队伍数大于3支少于7支),进行组内单循环,后进行交叉淘汰赛决定出最后的名次。现设计实现一个赛程自动安排软件。
(1)读文件输入参赛队伍名单,输出参赛队伍数。
(2)软件用户设定分组数后,由系统对参赛队伍进行随机分组。
(3)系统能够输出各组队列编号及赛程安排。(假设场地数与组数相同,赛程安排要避免一支队伍连续作战
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define MAXTEAMS 48 //最大队伍数
#define NAME_MAX_LEN 20 //名字最大长度
#define MAXGROUPS 8 //最大组数
#define MAX_TEAMS_IN_GROUP 6 //每组最多队数
#define TIME_LEN 40 //时间表示长度//形如2024-02-02-01:01~2024-02-02-24:60
#define TIMES_NUM 20 //最大场次
#define PLACE 20 //地点最大字节
struct team{
char name[NAME_MAX_LEN];
int score;
}team;
void Grouping(int groups[][MAX_TEAMS_IN_GROUP],int teams_num,int group);//将 teams_num个队伍分为group组,存储在二维数组groups中便于查找
void game_in_group_show(struct team teams[],int groups[][MAX_TEAMS_IN_GROUP],char time_line[][TIME_LEN],char places[][PLACE],int group_in_groups,int num_in_group);
void game_in_group_enter(struct team teams[],int groups[][MAX_TEAMS_IN_GROUP],char time_line[][TIME_LEN],char places[][PLACE],int group_in_groups,int num_in_group,int group_time[],int final_teams_num[][2]);//组内比赛,返回组内最大得分队伍在teams中的序数
int enter_1or2();
void final_game(struct team teams[],int final_teams_num[][2],char places[][PLACE],char time_line[][TIME_LEN],int group,int late_time);
void display(struct team teams[],int teams_num);
int main(){
FILE *fp;
int i,j,k,m,n;
int late_time,groups_time[MAXGROUPS];//groups_time 每组 组内单循环最晚的时间
int teams_num,group,group_in_groups,num_in_group,teams_mod_group,groups[MAXGROUPS][MAX_TEAMS_IN_GROUP],final_teams_num[MAXGROUPS][2];
// group_in_groups第几组-1;num_in_group组内队伍数;
//char file_location[80]="C:/Users/Administrator/Desktop/222.txt";
char file_location[80]="C:/Users/DELL/Desktop/222.txt";
//char file_location[80]="C:/Users/LindgeUser/Desktop/222.txt";
char time_line[TIMES_NUM][TIME_LEN]={"时间1","时间2","时间3","时间4","时间5","时间6","时间7","时间8","时间9","时间10","时间11","时间12","时间13","时间14","时间15","时间16","时间17","时间18","时间19","时间20"};
char places[MAXGROUPS][PLACE]={"地点1","地点2","地点3","地点4","地点5","地点6","地点7","地点8"};
struct team teams[MAXTEAMS];
fp=fopen(file_location,"r");
if(!fp){
printf("未成功打开文件!");
return 0;
}
i=0;
while(!feof(fp)){
fscanf(fp,"%s",teams[i++].name);
}
fclose;
if(i>48){
printf("队伍过多,无法处理!");
return 0;
}
teams_num=i;
printf("参赛队伍有:\n");
for(i=0;i<teams_num;i++){
teams[i].score=0;
printf(" %s\n",teams[i].name);
}
printf("共%d队\n\n",teams_num);
if(teams_num<16){
printf("队伍过少,不进行处理!");
return 0;
}
printf("输入组数(4-8):");
scanf("%d",&group);
while(group<4||group>8||(teams_num/group)<4||(teams_num/group)>6){
if((teams_num/group)<4) printf("组数过多,请重新输入(4-8):");
if((teams_num/group)>6) printf("组数过少,请重新输入(4-8):");
scanf("%d",&group);
}
teams_mod_group=teams_num-teams_num/group*group;
Grouping(groups, teams_num, group);
//输出每组的队伍
for(i=0;i<group;i++){
printf(" 第%d组:\n",i+1);
num_in_group=teams_num/group;
if(i<teams_mod_group) num_in_group++;
for(j=0;groups[i][j]!=0&&j<num_in_group;j++){
printf(" %s",teams[groups[i][j]-1].name);
}
printf("\n");
}
getchar();
printf("点击enter键开始展示组内单循环比赛安排\n");
getchar();
for(i=0;i<group;i++){
num_in_group=teams_num/group;
if(i<teams_mod_group) num_in_group++;
game_in_group_show(teams,groups,time_line,places,i,num_in_group);
}
for(i=0;i<group;i++){
num_in_group=teams_num/group;
if(i<teams_mod_group) num_in_group++;
game_in_group_enter(teams,groups,time_line,places,i,num_in_group,groups_time,final_teams_num);
}
late_time=0;
for(i=0;i<group;i++){
if(groups_time[i]>late_time) late_time=groups_time[i];
}
printf("交叉淘汰赛:\n");
final_game(teams,final_teams_num,places,time_line,group,late_time);
printf("最终成绩排名:\n");
display(teams,teams_num);
getchar();
getchar();
}
void Grouping(int groups[][MAX_TEAMS_IN_GROUP],int teams_num,int group){
int i,j,k;
int teams_mod_group;
int visited[teams_num]={0};//便于访问
teams_mod_group=teams_num-teams_num/group*group;
srand(time(NULL));//利用当前时间的时间戳 产生随机数
for(i=0;i<group;i++){
for(j=0;j<teams_num/group;j++){
int t=0;//标识visited的下标
int team=rand()%teams_num;//标识队伍的下标
while(visited[team]&&t<teams_num) {
team=(team+1)%teams_num;
t++;
}
if(!visited[team]){
visited[team]=1;
groups[i][j]=team+1;
}
}
if(i<teams_mod_group){
int t=0;
int team=rand()%teams_num;
while(visited[team]&&t<teams_num) {
team=(team+1)%teams_num;
t++;
}
if(!visited[team]){
visited[team]=1;
groups[i][j]=team+1;
}
}
}
}
void game_in_group_show(struct team teams[],int groups[][MAX_TEAMS_IN_GROUP],char time_line[][TIME_LEN],char places[][PLACE],int group_in_groups,int num_in_group){
int i,j,k;
int flag=0;
k=1;//as[][0]与as[][1]存储的数之间的差值
j=0;//每组比赛场数
printf("第%d组,%s:\n",group_in_groups+1,places[group_in_groups]);
while(k<num_in_group-1){//待修改,k<num_in_group-1
int as[6][2];
//当num_in_group=6时,as[6][2]内容为
//12 23 34 45 56
//13 24 35 46
//14 25 36
//15 26
//16
int t;//判断1 2谁胜
int line_num=0;//时间排列,倒三角,每一行的个数
for(i=1;i+k<=num_in_group;i++){
as[i][0]=i;
as[i][1]=i+k;
line_num++;
}
as[0][0]=1;
as[0][1]=num_in_group;
if(k==1){
for(i=1;i<=line_num;i=i+2){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1]==1||as[i-2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
}
if(!(as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1-2]==1||as[i][1]==num_in_group||as[2][0]==1||as[2][0]==num_in_group||as[2][1]==1||as[2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
flag=1;
}
for(i=2;i<=line_num;i=i+2){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1]==1||as[i-2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
}
}
else{
for(i=1;i<=line_num;i++){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-1][0]==1||as[i-1][0]==num_in_group||as[i-1][1]==1||as[i-1][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
}
}
if(flag==0&&k==num_in_group-2){
printf(" %s-%s的比赛无法安排,双方直接得分\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
}
k++;
}
printf("\n");
}
void game_in_group_enter(struct team teams[],int groups[][MAX_TEAMS_IN_GROUP],char time_line[][TIME_LEN],char places[][PLACE],int group_in_groups,int num_in_group,int groups_time[],int final_teams_num[][2]){
int i,j,k;
int flag=0;
int max_score=-1,scores[MAXGROUPS+1]={0};
int max_team;
int sores[6]={0};
k=1;//as[][0]与as[][1]之间的差值
j=0;//每组比赛场数
printf("第%d组,%s:\n",group_in_groups+1,places[group_in_groups]);
while(k<num_in_group-1){//待修改,k<num_in_group-1
int as[6][2];
//当num_in_group=6时,as[6][2]内容为
//12 23 34 45 56
//13 24 35 46
//14 25 36
//15 26
//16
int t;//判断1 2谁胜
int line_num=0;//时间排列,倒三角,每一行的个数
for(i=1;i+k<=num_in_group;i++){
as[i][0]=i;
as[i][1]=i+k;
line_num++;
}
as[0][0]=1;
as[0][1]=num_in_group;
if(k==1){
for(i=1;i<=line_num;i=i+2){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1]==1||as[i-2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[0][0]-1]++;
teams[as[0][0]-1].score++;
}
else{
scores[as[0][1]-1]++;
teams[as[0][1]-1].score++;
}
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[i][0]-1]++;
teams[as[i][0]-1].score++;
}
else{
scores[as[i][1]-1]++;
teams[as[i][1]-1].score++;
}
}
if(!(as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1-2]==1||as[i][1]==num_in_group||as[2][0]==1||as[2][0]==num_in_group||as[2][1]==1||as[2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[0][0]-1]++;
teams[as[0][0]-1].score++;
}
else{
scores[as[0][1]-1]++;
teams[as[0][1]-1].score++;
}
flag=1;
}
for(i=2;i<=line_num;i=i+2){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1]==1||as[i-2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[0][0]-1]++;
teams[as[0][0]-1].score++;
}
else{
scores[as[0][1]-1]++;
teams[as[0][1]-1].score++;
}
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[i][0]-1]++;
teams[as[i][0]-1].score++;
}
else{
scores[as[i][1]-1]++;
teams[as[i][1]-1].score++;
}
}
}
else{
for(i=1;i<=line_num;i++){
if(!(as[i][0]==1||as[i][0]==num_in_group||as[i][1]==1||as[i][1]==num_in_group||as[i-2][0]==1||as[i-2][0]==num_in_group||as[i-2][1]==1||as[i-2][1]==num_in_group)&&flag==0){
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[0][0]-1]++;
teams[as[0][0]-1].score++;
}
else{
scores[as[0][1]-1]++;
teams[as[0][1]-1].score++;
}
flag=1;
}
printf(" 第%d场比赛:\n",j+1);
printf("\t时间:%s",time_line[j++]);
printf("\t\t比赛队伍: ");
printf("%s-%s\n",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[groups[group_in_groups][as[i][0]-1]-1].name,teams[groups[group_in_groups][as[i][1]-1]-1].name);
t=enter_1or2();
if(t==1){
scores[as[i][0]-1]++;
teams[as[i][0]-1].score++;
}
else{
scores[as[i][1]-1]++;
teams[as[i][1]-1].score++;
}
}
}
if(flag==0&&k==num_in_group-2){
printf(" %s-%s的比赛无法安排,双方直接得分\n",teams[groups[group_in_groups][as[0][0]-1]-1].name,teams[groups[group_in_groups][as[0][1]-1]-1].name);
if(t==1){
scores[as[0][0]-1]++;
teams[as[0][0]-1].score++;
}
else{
scores[as[0][1]-1]++;
teams[as[0][1]-1].score++;
}
}
k++;
}
groups_time[group_in_groups]=j-1;
printf(" 分数:");
for(i=0;i<num_in_group;i++){
printf("%s:%d ",teams[groups[group_in_groups][i]-1].name,scores[i]);
}
printf("\n");
for(i=0;i<num_in_group;i++){
if(sores[i]>max_score){
max_score=scores[i];
final_teams_num[group_in_groups][0]=groups[group_in_groups][i]-1;
scores[i]=-1;
}
}
max_score=-1;
for(i=0;i<num_in_group;i++){
if(sores[i]>max_score){
max_score=scores[i];
final_teams_num[group_in_groups][1]=groups[group_in_groups][i]-1;
scores[i]=-1;
}
}
}
int enter_1or2(){
char a[30];
scanf("%s",&a);
while(strcmp(a,"1")!=0&&strcmp(a,"2")!=0){
printf(" 输入错误!请重新输入:");
scanf("%s",&a);
}
if(strcmp(a,"1")==0) return 1;
if(strcmp(a,"2")==0) return 2;
}
void final_game(struct team teams[],int final_teams_num[][2],char places[][PLACE],char time_line[][TIME_LEN],int group,int late_time){
int i,j,k,t,count;
int final_score[MAXGROUPS][2];
int visited[group][2]={0};
for(i=0;i<group;i++){
final_score[i][0]=0;
final_score[i][1]=0;
}
k=0;//记录交叉淘汰赛的场数
if(group%2==1){
k++;
printf(" 第%d场淘汰赛\n",k);//1
int G=group-1;
for(i=0;i<G/2;i++){
printf("\t%s,%s:",places[2*i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
printf("\t%s,%s:",places[2*i+1],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
}
printf(" %s与%s比赛无法安排,直接得分!\n",teams[final_teams_num[G][0]].name,teams[final_teams_num[G][1]].name);
printf("\n");
for(i=0;i<G/2;i++){
printf("\n %s,%s:",places[2*i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
int a;
a=enter_1or2();
if(a==1){
final_score[2*i][0]++;
teams[final_teams_num[2*i][0]].score++;
}
else{
final_score[2*i+1][1]++;
teams[final_teams_num[2*i+1][1]].score++;
}
printf("\n %s,%s:",places[2*i+1],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
a=enter_1or2();
if(a==1){
final_score[2*i+1][0]++;
teams[final_teams_num[2*i+1][0]].score++;
}
else{
final_score[2*i][1];
teams[final_teams_num[2*i][1]].score++;
}
}
printf(" %s与%s比赛无法安排,直接得分!\n",teams[final_teams_num[G][0]].name,teams[final_teams_num[G][1]].name);
printf("\n");
final_score[G][0]++;
final_score[G][1]++;
teams[final_teams_num[G][0]].score++;
teams[final_teams_num[G][1]].score++;
k++;
printf(" 第%d场淘汰赛:\n",k);//2
count=0;
int score1[MAXGROUPS];
int teams_num1[MAXGROUPS];
int b=0;
for(i=0;i<group;i++){
for(j=0;j<2;j++){
if(final_score[i][j]==1){
score1[b]=final_score[i][j];
teams_num1[b++]=final_teams_num[i][j];
}
}
}
int P=group+1;
for(i=0;i<P;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
}
for(i=0;i<P;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score1[i]++;
teams[teams_num1[i]].score++;
count++;
}
else{
score1[i+1]++;
teams[teams_num1[i+1]].score++;
count++;
}
}
if(count==1) return ;
k++;
printf(" 第%d场淘汰赛:\n",k);//3
count=0;
int score2[MAXGROUPS/2];
int teams_num2[MAXGROUPS/2];
b=0;
for(i=0;i<P;i++){
if(score1[i]==2){
score2[b]=score1[i];
teams_num2[b++]=teams_num1[i];
}
}
for(i=0;i<P/2;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
if(group==5){
printf(" %s无法安排比赛,直接得分!\n",teams[teams_num2[2]].name);
break;
}
}
for(i=0;i<P/2;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score2[i]++;
teams[teams_num2[i]].score++;
count++;
}
else{
score2[i+1]++;
teams[teams_num2[i+1]].score++;
count++;
}
if(group==5){
printf(" %s无法安排比赛,直接得分!\n",teams[teams_num2[2]].name);
score2[2]++;
teams[teams_num2[2]].score++;
count++;
break;
}
}
if(count==1) return ;
k++;
printf(" 第%d场淘汰赛:\n",k);//4
int score3[MAXGROUPS/4];
int teams_num3[MAXGROUPS/4];
b=0;
for(i=0;i<P/2;i++){
if(score2[i]==3){
score3[b]=score2[i];
teams_num3[b++]=teams_num2[i];
}
}
for(i=0;i<P/4;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
}
for(i=0;i<P/4;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score3[i]++;
teams[teams_num3[i]].score++;
}
else{
score3[i+1]++;
teams[teams_num3[i+1]].score++;
}
}
}
else{
k++;
printf(" 第%d场淘汰赛:\n",k);//1
for(i=0;i<group/2;i++){
printf("\t%s,%s:",places[2*i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
printf("\t%s,%s:",places[2*i+1],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
}
printf("\n");
for(i=0;i<group/2;i++){
printf("\n %s,%s:",places[2*i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[final_teams_num[2*i][0]].name,teams[final_teams_num[2*i+1][1]].name);
int a;
a=enter_1or2();
if(a==1){
final_score[2*i][0]++;
teams[final_teams_num[2*i][0]].score++;
}
else{
final_score[2*i+1][1];
teams[final_teams_num[2*i+1][1]].score++;
}
printf("\n %s,%s:",places[2*i+1],time_line[late_time+k]);
printf("\t%s-%s\n",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[final_teams_num[2*i+1][0]].name,teams[final_teams_num[2*i][1]].name);
a=enter_1or2();
if(a==1){
final_score[2*i+1][0]++;
teams[final_teams_num[2*i+1][0]].score++;
}
else{
final_score[2*i][1]++;
teams[final_teams_num[2*i][1]].score++;
}
}
k++;
printf(" 第%d场淘汰赛:\n",k);//2
count++;
int score1[MAXGROUPS];
int teams_num1[MAXGROUPS];
int b=0;
for(i=0;i<group;i++){
for(j=0;j<2;j++){
if(final_score[i][j]==1){
score1[b]=final_score[i][j];
teams_num1[b++]=final_teams_num[i][j];
}
}
}
printf("\n");
for(i=0;i<group;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
}
for(i=0;i<group;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num1[i]].name,teams[teams_num1[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score1[i]++;
teams[teams_num1[i]].score++;
count++;
}
else{
score1[i+1]++;
teams[teams_num1[i+1]].score++;
count++;
}
}
if(count==1) return ;
k++;
printf(" 第%d场淘汰赛:\n",k);//3
count=0;
int score2[MAXGROUPS/2];
int teams_num2[MAXGROUPS/2];
b=0;
for(i=0;i<group;i++){
if(score1[i]==2){
score2[b]=score1[i];
teams_num2[b++]=teams_num1[i];
}
}
printf("\n");
for(i=0;i<group/2;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
if(group==6){
printf(" %s无法安排比赛,直接得分!\n",teams[teams_num2[2]].name);
break;
}
}
for(i=0;i<group/2;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num2[i]].name,teams[teams_num2[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score2[i]++;
teams[teams_num2[i]].score++;
count++;
}
else{
score2[i+1]++;
teams[teams_num2[i+1]].score++;
count++;
}
if(group==6){
printf(" %s无法安排比赛,直接得分!\n",teams[teams_num2[2]].name);
score2[2]++;
teams[teams_num2[2]].score++;
count++;
break;
}
}
if(count==1) return ;
k++;
printf(" 第%d场淘汰赛:\n",k);//4
int score3[MAXGROUPS/4];
int teams_num3[MAXGROUPS/4];
b=0;
for(i=0;i<group/2;i++){
if(score2[i]==3){
score3[b]=score2[i];
teams_num3[b++]=teams_num2[i];
}
}
printf("\n");
for(i=0;i<group/4;i=i+2){
printf("\t%s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
}
for(i=0;i<group/4;i=i+2){
printf("\n %s,%s:",places[i],time_line[late_time+k]);
printf("\t%s-%s\n",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
printf(" 请输入谁获胜了,%s获胜输入1,%s获胜输入2:",teams[teams_num3[i]].name,teams[teams_num3[i+1]].name);
int a;
a=enter_1or2();
if(a==1){
score3[i]++;
teams[teams_num3[i]].score++;
}
else{
score3[i+1]++;
teams[teams_num3[i+1]].score++;
}
}
}
}
void display(struct team teams[],int teams_num){
int i,j,k,m,n=1,count=0;
int visited[teams_num]={0};
while(count<teams_num){
int max=0;
for(i=0;i<teams_num;i++){
if(teams[i].score>max&&visited[i]==0){
max=teams[i].score;
}
}
printf("第%d名的队伍:得%d分",n,max);
for(i=0;i<teams_num;i++){
if(teams[i].score==max&&visited[i]==0){
printf(" %s",teams[i].name);
count++;
visited[i]=1;
}
}
printf("\n");
n++;
}
}
)
数据结构课设,写了近60个小时。好吧,我水平很拉。既然你搜到了,我就要吐槽一下,我写好这个课设没找到多少参考,可以说除了概念与个别函数,就没有找到可用的了。我也知道Ai很牛逼,但是我就是不服,不想用。又或者说我懒得在Ai上浪费太多时间去一遍遍修正我想要的代码。这个课设时间安排真的不合理,课设答辩结束,第二天就要考高数,再后退四天还有英语和线代考试,很难绷。现在我的这个成绩出来了,我终于可以将这个代码发出来了,哈哈哈,一个人做的,老师给的分还不低,doge,哈哈哈,真不戳!老师还是蛮好的嘛!
你搜我这个代码的可能是参考,也可能是直接抄了,对我来说无所谓了已经。有问题或者疑问可以问我,虽然我可能不会马上回答你,但是我看到了就尽量回答了,不过我已经关闭手机上这个软件的通知了,因为不想打开手机就看到满屏的消息、通知。
最后希望你能给我点个赞!给我个鼓励,让我有动力在下次写没有人发过的代码继续发。点不点赞我还是都会发的,哈哈哈。students help students! 哈哈哈哈。