您的位置:首页 > 其它

Gym 100712A - Who Is The Winner

2016-02-15 21:46 393 查看
原题见:

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

代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 105
//两队比赛解决问题并记罚时;s为解决问题数,p为惩罚时间
//s多则为胜出,s相同时,p小为胜!
using namespace std;
struct team
{
char name[25];
int s,p;
};

int cmp(team a,team b)
{
return a.s>b.s||a.s==b.s&&a.p<b.p;
}

int main()
{
team a[MAX];
int i,t,n;;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
for(i=1; i<=n ;i++)
{
getchar();
scanf("%s%d%d",a[i].name,&a[i].s,&a[i].p);
}
sort(a+1,a+1+n,cmp);
printf("%s\n",a[1].name);
}
return 0;
}


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

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

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

C语言代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MAX 105
//两队比赛解决问题并记罚时;s为解决问题数,p为惩罚时间
//s多则为胜出,s相同时,p小为胜!

struct team
{
char name[25];
int s,p;
};

int main()
{
team a[MAX];
int i,t,n;
int max=0,maxs=0,maxp=10000;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
max=0;maxs=0;maxp=10000;
for(i=1; i<=n ;i++)
{
getchar();
scanf("%s%d%d",a[i].name,&a[i].s,&a[i].p);
if(a[i].s>maxs)
{
maxs=a[i].s;
max=i;
maxp=a[i].p;
}
else if(a[i].s==maxs)
{
if(a[i].p<maxp)
{
maxp=a[i].p;
max=i;
}
}
}
printf("%s\n",a[max].name);
}
return 0;
}


注意排序!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: