编程基础——函数调用
1.7:A Contesting Decision
题目:
背景:
一支参赛队的记分由两个部分组成:第一部分是被解出的题数,第二部分是罚时,表示解题总的耗费时间和试题没有被解出前错误的提交所另加的罚时。对于每个被正确解出的试题,罚时等于该问题被解出的时间加上每次错误提交的20分钟罚时。在问题没有被解出前不加罚时。因此,如果一支队伍在比赛20分钟的时候在第二次提交解出第1题,他们的罚时是40分种。如果他们提交第2题3次,但没有解决这个问题,则没有罚时。如果他们在120分钟提交第3题,并一次解出的话,该题的罚时是12分。这样,该队的成绩是罚时160分,解出了两道试题。冠军队是解出最多试题的队伍。如果两队在解题数上打成平手,那么罚时少的队是冠军队。
输入:
• 程序评判的程序设计竞赛有4题。本题设定,在计算罚时后,不会导致
队与队之间不分胜负的情况。
• 第1行 为参赛队数n • 第2 - n+1行为每个队的参赛情况。每行的格式
• < Name > < p1Sub > < p1Time > < p2Sub > < p2Time > … < p4Time > • 第一个元素是不含空格的队名。后面是对于4道试题的解题情况(该队
对这一试题的提交次数和正确解出该题的时间(都是整数))。如果 没有解出该题,则解题时间为0。如果一道试题被解出,提交次数至少
是一次。
输出:
• 输出一行。给出优胜队的队名,解出题目的数量,以及罚时。
试题分析:
•本题需要用到结构体录入每个参赛人员的信息,包含参赛队名、4道题提交次数、4道题解时间、解题数,以及总罚时。
样例:
Sample Input:
4
Stars 2 20 5 0 4 190 3 220
Rockets 5 180 1 0 2 0 3 100
Penguins 1 15 3 120 1 300 4 0
Marsupials 9 0 3 100 2 220 3 80
Sample Output:
Penguins 3 475
#include <stdio.h>
struct data{
char name[10];
int cs[4];
int time[4];
int num;
int sum;
};
int main () {
int n,i,j;
scanf("%d",&n);
struct data a[n];
for(i=0;i<n;++i){//清零
a[i].num=4;//解出的题目数量
a[i].sum=0;
}
for(i=0;i<n;++i){
scanf("%s",a[i].name);
for(j=0;j<4;++j){
scanf("%d%d",&a[i].cs[j],&a[i].time[j]);
}
}
for(i=0;i<4;++i){
for(j=0;j<4;++j){
if(a[i].time[j]!=0){
a[i].sum+=a[i].time[j]+(a[i].cs[j]-1)*20;
}
if(a[i].time[j]==0) --a[i].num;
}
}
int max=1,t=1,m=0;
for(i=0;i<4;++i){
if(a[i].num>max||(a[i].num==max&&a[i].sum<t))
max=a[i].num,t=a[i].sum,m=i;//m记录哪一位获胜
}
printf("%s %d %d",a[m].name,max,t);
return 0;
}