原题见:
题目要求:两队比赛解决问题并记罚时;解决问题数多则为胜出,解决问题数相同时,惩罚时间小为胜!
代码如下:
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 }
注意排序!