网址如下:
P1051 [NOIP2005 提高组] 谁拿了最多奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
最近一直在学c++,想着水一道题爽爽
结果就出问题了
代码如下:
#include<iostream>
#include<string>
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<iostream>
#include<string>
#include<algorithm>
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分,可能是快排的原因,无法完美处理奖学金相同的情况
最后是用了“打擂台排法”
实际上早上是水一道更难的题的,写一半脑子糊糊的,想着先学了重载之后把高精度整合一下再整这一题(简单来说就是菜)