期末C语言大作业——榜单

这篇博客详细介绍了如何根据ACM比赛的提交记录计算并输出最终的榜单,包括每道题的通过罚时、提交状态的计数以及队伍的排名规则。文章提供了输入输出描述,并强调了处理各种状态和时间计算的注意事项。
摘要由CSDN通过智能技术生成
题目描述:

给定一场ACM比赛的题目数量和提交列表,请你打印输出最终榜单。榜单的格式见输出和样例。
根据比赛规则,榜单有以下要求:

每道题的通过罚时按照分钟计算。每次未通过提交增加20分钟罚时,输入数据保证每个队伍罚时均小于10000分钟。到比赛结束都没有通过的题目不计入该队伍的罚时。
每队通过后的题目在榜单的题目栏中用“+”号显示。如果仅提交一次就通过了,则显示“+”。否则显示“+k”,k 为这个队伍对于这道题通过之前的总提交次数。输入数据保证 k 不大于 9。
每队提交但是未通过的题目在榜单的题目栏中用“-”号显示。显示“-k”,k 为这个队伍对于这道题的总提交次数。输入数据保证 k 不大于9。
每队没有提交的题目需要在榜单的该队的题目栏留空。
题目提交状态为“Compile Error”的提交不计入榜单。
对于某个队伍,在通过某个题目后再次提交该题目,则通过后的提交不计入榜单。
如果某个队伍没有提交,或者所有的提交均不计入榜单。则榜单上不显示该队伍。
题目提交状态为“Accepted”的提交表示本题正确通过,其它状态均表示未通过。

输入描述:

第一行一个数字 n(n≤14),表示这场比赛有 n 道题目,题目的标号从 A开始。
接下来若干行,每行格式形如:时间 题号 结果 队名,表示一条提交记录,提交记录按提交时间顺序排列。
其中,时间形如HH:MM,输入数据保证时间一定小于05:00。
题号为单独的一个大写字母。
结果属于集合 { Accepted, Wrong Answer, Time Limit Exceeded, Compile Error, Memory Limit Exceeded, Output Limit Exceeded, Runtime Error, Presentation Error }。
队名为一个含有空格、大写和小写字母的字符串,队名长度不超过 43。
输入以一行 “GAME OVER!” 结尾,表示比赛结束。

输出描述:

输出的榜单有 n+4栏,每栏之间间隔 2个空格。
Rank一栏的宽度为 4个字符,表示该队伍的排名。
Who一栏的宽度43个字符,表示该队伍的名字。
Solved一栏宽度为 6个字符,显示每个队伍通过题目的数量。
Penalty一栏宽度为 7个字符,按要求显示每队总用时(每题通过时间+有效的总罚时)。
接下来是题目栏,每个题目栏的宽度均为 3个字符,按要求显示“+”或“-”,表示每个队伍通过题目的情况。
每一栏的第一行为这一栏的名称,其中,Who需左对齐,其他栏需右对齐。
题目栏的名称为题目的标号。
接下来若干行,按顺序输出每个队伍的信息,每栏的信息需右对齐。
队伍按照通过题目数量排名,如果两队通过题目数量相等,总用时少的队伍排名靠前。
如果出现题数和罚时均相等的队伍,则按照队名的字典序排序,同时Rank一栏的值需相等。第一个与他们排名不相等的队伍的排名选择绝对排名,例如前五个队伍的排名分别为1、2、3、3、3,则第六个队伍的绝对排名为6。

#include<stdio.h>
#include<string.h>

struct point     //结构体储存队伍信息 
{
   
	char name[50];//队名 
	int time[15];//每题的罚时 
	int solve[15];//每题的提交次数 
	int solve_num;//解决的题目数 
	int sum_time;//总罚时 
	int rank;//排名 
}arr[35];

void init_init(int n)  //初始化 
{
   
	for(int i=0;i<30;++i){
   
		arr[i].solve_num=0;
		arr[i].sum_time=0;
		for(int j=0;j<n;++j){
   
			arr[i].solve[j]=0;
			arr[i].time[j]=0;
		}
	}
}

int init(char ch)   //每种提交情况占用的位置 
{
   
	if(ch=='A') return 8;
	if(ch=='W') return 12;
	if(ch=='T') return 19;
	if(ch=='C') return 13;
	if(ch=='M') return 21;
	if(ch=='O') return 21;
	if(ch=='R') return 13;
	if(ch=='P') return 18;
}

int main(void)
{
   
	//定义变量区
	int n;
	char brr[60],crr_name[50];
	int i,j,k,l,m
  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值