1266–谁是冠军
题目描述
Description
厦门理工学院第七届大学生程序设计大赛的赞助企业是厦门青瓷数码技术有限公司,公司想给比赛的冠军赞助1000元人民币,但是公司不知道谁是冠军,请你来帮忙算一算吧。
比赛的冠军是正确解答题数最多且总用时最少的同学。排名首先看正确解答题数,正确解答题数多的同学排在前面。如果两位同学正确解答题数相同,则总用时最少的同学排在前面。
题目要求
很常规的内存和时间限制:
Time Limit:1000MS
Memory Limit:65536K
- 输入
Input
输入第一行为一个数 N,代表一共有 N位同学的数据要处理( 2 <= N <= 300 )
接下来的N行每行有两个整型数据,以空格间隔
第一个是正确解答题目数量A ( 1 <= A <= 10 )
第二个是总用时B分钟( 1 <= B <= 10000 )
- 输出
Output
冠军正确解答题目的数量和总用时,以空格间隔。
思路
- 其实这道题本质上就是两个数的比较,谁解决的问题多谁就胜出**,**当解决问题数量相同时,谁消耗的时间少就胜出。
- 这里采用了C++语言来编写,所以利用一下C++的类,如果用C语言的话可以用结构体来表示,其实语言主要就是一种实现方式,重要的是思想。
代码部分的解释
类的框架
class player //player 表示参赛选手
{
public:
bool operator!=(player p)//重载 != 号运算符,用于后续的判断
{
if (this->problem!= p.problem|| this->time != p.time)
return true;
return false;
}
int problem; //解决的问题
int time; //解决问题消耗的时间
};
比较函数,比较两个选手
返回胜出的那个选手
player player_comp(player p1, player p2)
{
//谁解决的问题多就直接返回
if (p1.problem> p2.problem)
return p1;
//如果解决的问题数量一样
if (p1.problem== p2.problem)
{
if (p1.time < p2.time)//消耗的时间少就胜出
return p1;
else
return p2;
}
//p1没有返回的话就说明解决的问题数量比p2少,直接返回p2
return p2;
}
案例输入输出
代码实现
#include<iostream>
using namespace std;
class player
{
public:
bool operator!=(player p)
{
if (this->problem!= p.problem|| this->time != p.time)
return true;
return false;
}
int problem;
int time;
};
player player_comp(player p1, player p2)
{
if (p1.problem> p2.problem)
return p1;
if (p1.problem== p2.problem)
{
if (p1.time < p2.time)
return p1;
else
return p2;
}
return p2;
}
int main()
{
int N,i,h,t;//h表示解决问题数量
cin >> N; //t表示解决问题时间
//mvp即使最终胜出的选手
player* p = new player[N],mvp,temp;
for (i = 0; i < N; i++)
{
cin >> h >> t;
p[i].problem= h;
p[i].time = t;
}
mvp = p[0];
for (i = 0; i < N - 1; i++)
{
temp = player_comp(p[i], p[i + 1]);
if (player_comp(temp, mvp) != mvp)
mvp = temp;
}
cout << mvp.problem<< ' ' << mvp.time;
return 0;
}