P1051 [NOIP2005 提高组] 谁拿了最多奖学金

P1051 [NOIP2005 提高组] 谁拿了最多奖学金_第1张图片

P1051 [NOIP2005 提高组] 谁拿了最多奖学金_第2张图片

网址如下:

P1051 [NOIP2005 提高组] 谁拿了最多奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

最近一直在学c++,想着水一道题爽爽

结果就出问题了

代码如下:

#include
#include
using namespace std;
struct Student{
	string name;
	int price;
};
Student list[100];
int N, total;

int main(void)
{
	cin >> N;
	for(int i = 0; i < N; i++)
	{
		char c_tmp1, c_tmp2;
		int grade, evaluation, n_tmp3;
		bool is_cadre, is_west, is_thesis;
		cin >> list[i].name >> grade >> evaluation
		>> c_tmp1 >> c_tmp2 >> n_tmp3;
		is_cadre = (c_tmp1 == 'Y');
		is_west = (c_tmp2 == 'Y');
		is_thesis = (n_tmp3 > 0);
		//判断奖金
		if(grade > 80 && is_thesis)  list[i].price += 8000;
		if(grade > 85 && evaluation > 80)  list[i].price += 4000;
		if(grade > 90)  list[i].price += 2000;
		if(grade > 85 && is_west)  list[i].price += 1000;
		if(evaluation > 80 && is_cadre)  list[i].price += 850;
		total += list[i].price;
	}
	for(int i = 0; i < N - 1; i++)
	{
		for(int j = i + 1; j < N; j++)
			if(list[i].price < list[j].price)
			{
				Student tmp = list[i];
				list[i] = list[j];
				list[j] = tmp;
			}
	}
	cout << list[0].name << endl << list[0].price << endl << total;

	return 0;
}

这个是100分的代码

看看下面这个:

#include
#include
#include
using namespace std;
struct Student{
	string name;
	int price;
};
bool cmp(Student a, Student b);
Student list[100];
int N, total;

int main(void)
{
	cin >> N;
	for(int i = 0; i < N; i++)
	{
		char c_tmp1, c_tmp2;
		int grade, evaluation;
		bool is_cadre, is_west, is_thesis;
		cin >> list[i].name >> grade >> evaluation
		>> c_tmp1 >> c_tmp2 >> is_thesis;
		is_cadre = (c_tmp1 == 'Y');
		is_west = (c_tmp2 == 'Y');
		//判断奖金
		if(grade > 80 && is_thesis)  list[i].price += 8000;
		if(grade > 85 && evaluation > 80)  list[i].price += 4000;
		if(grade > 90)  list[i].price += 2000;
		if(grade > 85 && is_west)  list[i].price += 1000;
		if(evaluation > 80 && is_cadre)  list[i].price += 850;
		total += list[i].price;
	}
	sort(list, list + N, cmp);
	cout << list[0].name << endl << list[0].price << endl << total;

	return 0;
}
bool cmp(Student a, Student b)
{
	return a.price > b.price;
}

这题思路还是很简单的,一看就懂

首先,因为对cin的不熟悉,我认为把int值直接输入到bool变量是可行的,结果是当int值不是0和1的时候,接下来的输入不知道为什么都无法进行

还有,sort函数只能得到90分,可能是快排的原因,无法完美处理奖学金相同的情况

最后是用了“打擂台排法”

实际上早上是水一道更难的题的,写一半脑子糊糊的,想着先学了重载之后把高精度整合一下再整这一题(简单来说就是菜)

你可能感兴趣的:(c++)