厦门理工OJ1266--谁是冠军

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值