Gym 100712A - Who Is The Winner

时间:2022-08-25 17:56:37

原题见:

 

题目要求:两队比赛解决问题并记罚时;解决问题数多则为胜出,解决问题数相同时,惩罚时间小为胜!

 

代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #define MAX 105
 5 //两队比赛解决问题并记罚时;s为解决问题数,p为惩罚时间
 6 //s多则为胜出,s相同时,p小为胜! 
 7 using namespace std;
 8 struct team
 9 {
10     char name[25];
11     int s,p;
12 };
13 
14 int cmp(team a,team b)
15 {
16     return a.s>b.s||a.s==b.s&&a.p<b.p;
17 }
18 
19 int main()
20 {
21     team a[MAX];
22     int i,t,n;;
23     scanf("%d",&t);
24     while(t--)
25     {
26         scanf("%d",&n);
27         memset(a,0,sizeof(a));
28         for(i=1; i<=n ;i++)
29         {
30             getchar();
31             scanf("%s%d%d",a[i].name,&a[i].s,&a[i].p);        
32         }
33         sort(a+1,a+1+n,cmp);
34         printf("%s\n",a[1].name);
35     }
36     return 0; 
37 }

 

       memset(起点,0或-1,sizeof());

       其中的memset函数作用是初始化第一个指针变量的元素为第二个数值(通常为0或-1);

       sort函数:1、#include <algorithm>下有一个直接的sort(begin,end)   注意:这是默认是升序排列

                     2、想降序的话要自己写一个比较函数——cmp函数(即compare 比较),然后调用sort(begin,end,compare)

 C语言代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MAX 105
 4 //两队比赛解决问题并记罚时;s为解决问题数,p为惩罚时间
 5 //s多则为胜出,s相同时,p小为胜! 
 6 
 7 struct team
 8 {
 9     char name[25];
10     int s,p;
11 };
12 
13 int main()
14 {
15     team a[MAX];
16     int i,t,n;
17     int max=0,maxs=0,maxp=10000; 
18     scanf("%d",&t);
19     while(t--)
20     {
21         scanf("%d",&n);
22         max=0;maxs=0;maxp=10000;
23         for(i=1; i<=n ;i++)
24         {
25             getchar();
26             scanf("%s%d%d",a[i].name,&a[i].s,&a[i].p);
27             if(a[i].s>maxs)
28             {
29                 maxs=a[i].s;
30                 max=i;
31                 maxp=a[i].p;
32             }
33             else if(a[i].s==maxs)
34             {
35                 if(a[i].p<maxp)
36                    {
37                     maxp=a[i].p;
38                     max=i;
39                 }
40             }
41         }
42         printf("%s\n",a[max].name);
43     }
44     return 0; 
45 }

         注意排序!