奖学金(prize)
内存限制: 256 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
题目描述
XX 中学每学期都会给学生提供丰厚的奖学金,但是要想获得这些奖学金也不是一件容易的事情。XX 中学对学生成绩的评定一共有 A 、B 、C 、D 共 4 个等级,提供的奖学金有如下几种:
-
竞赛奖学金提供给至少在一门学科竞赛中获得省级一等奖以上奖项并且语数英三门课的成绩被评定为 A 或 B 而且还是三好学生的同学,奖金 3000 元
-
华英奖学金提供给至少在一门学科竞赛中获得全省前 20 名的同学,奖金 2000 元
-
优秀三好学生奖学金提供给所有 5 门科目的成绩都被评定为 A 的三好学生,奖金 1000 元
为了让尽量多的同学拿到奖学金,XX 中学规定,除了贫困生以外,所有的同学最多只能获得一项奖学金,如有满足多项奖学金要求的同学可以任选一个奖学金;贫困生获得的奖学金则没有任何限制,最多可以拿到全部 3 个奖学金。现在学期快结束了,小 k 同学把他的成绩单给你看,希望你能告诉他在这学期他最多可以拿到多少奖学金。
输入格式
一行一个字符串,按如下的方式给出信息。
首先按照语文、数学、英语、选修1、选修2的顺序给出小 k 所有 5 门课的成绩评定,相邻两个成绩评定之间用一个空格隔开。
然后给出一个空格,以下 5 个整数,相邻两个整数之间用一个空格隔开,分别表示小 K 参加 5 门学科竞赛的成绩信息。-1 表示小 k 没有参加那一门学科竞赛;0 表示小 k 获得了省前 20 的成绩;1 表示小 k 获得了省一等奖的成绩,省前 20 名一定是省一等奖;2 表示小 k 获得了省二等奖或省二等奖以下的成绩。
接下来给出一个空格和一个字符,字符为 N 或 Y,Y 表示小 k 是三好学生,N 表示小 k 不是三好学生。
最后是一个空格和一个字符,字符为 N 或 Y ,Y 表示小 k 是贫困生,N 表示小 k 不是贫困生。行末没有多余空格,但会给出一个回车符。
输出格式
仅有一行包含一个整数,表示小 k 最多能得到多少奖学金。
样例
样例输入 1
复制B A B A A 0 2 1 -1 0 Y N
样例输出 1
复制3000
样例解释 1
小 k 同学同时符合竞赛奖学金和华英奖学金的标准,但是因为小 k 不是贫困生,所以最多只能得到一个奖学金,选择拿竞赛奖学金最多可以拿到 3000 元。
样例输入 2
复制A A A A A 0 2 1 -1 0 Y Y
样例输出 2
复制6000
样例解释 2
小 k 同学能同时符合 3 个奖学金的标准,并且小 k 是贫困生,所以小 k 可以拿到全部 3 个奖学金,共 6000 元
样例输入 3
复制D D D D D 1 1 1 1 1 N N
样例输出 3
复制0
数据范围与提示
40% 的数据满足小 k 不是贫困生
#include <bits/stdc++.h>
using namespace std;
int a, b, c, d, e, sum, jing, hua, you;
char z, s, y, x1, x2, f, g;
int main() {
scanf("%c %c %c %c %c", &z, &s, &y, &x1, &x2);
scanf("%d %d %d %d %d %c %c", &a, &b, &c, &d, &e, &f, &g);
//输入太长,分成两行
if(a == 1 || b == 1 || c == 1 || d == 1 || e == 1 || a == 0 || b == 0 || c == 0 || d == 0 || e == 0) {
if(z == 'A' || z == 'B') {
if(s == 'A' || s == 'B') {
if(y == 'A' || y == 'B') {
if(f == 'Y') {
jing += 3000;
}
}
}
}
}
if(a == 0 || b == 0 || c == 0 || d == 0 || e == 0) {
hua += 2000;
}
if(z == s == y == x1 == x2 == 'A' && f == 'Y') {
you += 1000;
}
if(g == 'Y') {
sum = jing + hua + you;
} else {
jing = max(jing, hua);
sum = max(jing, you);
}
printf("%d", sum);
return 0;
}
这道题是一道经典的条件选择语句题,注意细心,细节容易出错