业余比赛赛程安排自动化软件

【问题描述】

业余球类比赛通常根据参赛队伍的多少均分为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! 哈哈哈哈。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值