奖学金(prize)C++题解

编程题目描述了如何根据学生小K的成绩和竞赛表现计算他可能获得的奖学金总额,涉及成绩评定、竞赛等级和资格条件的判断。
摘要由CSDN通过智能技术生成

奖学金(prize)

内存限制: 256 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较

题目描述

题目描述

XX 中学每学期都会给学生提供丰厚的奖学金,但是要想获得这些奖学金也不是一件容易的事情。XX 中学对学生成绩的评定一共有 A 、B 、C 、D 共 4 个等级,提供的奖学金有如下几种:

  1. 竞赛奖学金提供给至少在一门学科竞赛中获得省级一等奖以上奖项并且语数英三门课的成绩被评定为 A 或 B 而且还是三好学生的同学,奖金 3000 元

  2. 华英奖学金提供给至少在一门学科竞赛中获得全省前 20 名的同学,奖金 2000 元

  3. 优秀三好学生奖学金提供给所有 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;
} 

这道题是一道经典的条件选择语句题,注意细心,细节容易出错

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们来编写这个程序。首先,我们需要定义一个结构体来表示学生成绩信息,包括各门课程成绩和德育积分: ```c++ #include <iostream> #include <string> using namespace std; struct Student { string name; double chinese; double math; double english; double cultural_credits; double moral_credits; double cultural_points; double comprehensive_points; }; ``` 然后,我们可以编写一个函数来计算学生的文化积分和综合积分: ```c++ double calculate_cultural_points(double chinese, double math, double english) { double total = chinese + math + english; if (total >= 270) { return 100.0; } else if (total >= 240) { return 90.0; } else if (total >= 210) { return 80.0; } else if (total >= 180) { return 70.0; } else if (total >= 150) { return 60.0; } else { return 50.0; } } double calculate_comprehensive_points(double cultural_points, double moral_credits) { return cultural_points * 0.7 + moral_credits * 0.3; } ``` 接下来,我们可以编写一个函数来进行冒泡排序,按照综合积分从高到低排名: ```c++ void bubble_sort(Student students[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (students[j].comprehensive_points < students[j + 1].comprehensive_points) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } ``` 最后,我们可以编写一个函数来输出奖学金名单: ```c++ void print_scholarship_list(Student students[], int n) { int first_prize_count = n * 0.02; int second_prize_count = n * 0.08; int third_prize_count = n * 0.15; cout << "一等奖学金:" << endl; for (int i = 0; i < first_prize_count; i++) { cout << students[i].name << endl; } cout << "二等奖学金:" << endl; for (int i = first_prize_count; i < first_prize_count + second_prize_count; i++) { cout << students[i].name << endl; } cout << "三等奖学金:" << endl; for (int i = first_prize_count + second_prize_count; i < first_prize_count + second_prize_count + third_prize_count; i++) { cout << students[i].name << endl; } } ``` 完整的代码如下所示: ```c++ #include <iostream> #include <string> using namespace std; struct Student { string name; double chinese; double math; double english; double cultural_credits; double moral_credits; double cultural_points; double comprehensive_points; }; double calculate_cultural_points(double chinese, double math, double english) { double total = chinese + math + english; if (total >= 270) { return 100.0; } else if (total >= 240) { return 90.0; } else if (total >= 210) { return 80.0; } else if (total >= 180) { return 70.0; } else if (total >= 150) { return 60.0; } else { return 50.0; } } double calculate_comprehensive_points(double cultural_points, double moral_credits) { return cultural_points * 0.7 + moral_credits * 0.3; } void bubble_sort(Student students[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (students[j].comprehensive_points < students[j + 1].comprehensive_points) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } void print_scholarship_list(Student students[], int n) { int first_prize_count = n * 0.02; int second_prize_count = n * 0.08; int third_prize_count = n * 0.15; cout << "一等奖学金:" << endl; for (int i = 0; i < first_prize_count; i++) { cout << students[i].name << endl; } cout << "二等奖学金:" << endl; for (int i = first_prize_count; i < first_prize_count + second_prize_count; i++) { cout << students[i].name << endl; } cout << "三等奖学金:" << endl; for (int i = first_prize_count + second_prize_count; i < first_prize_count + second_prize_count + third_prize_count; i++) { cout << students[i].name << endl; } } int main() { int n; cout << "请输入学生人数:"; cin >> n; Student students[n]; for (int i = 0; i < n; i++) { cout << "请输入第" << i + 1 << "个学生的姓名、语文成绩、数学成绩、英语成绩、文化课程学分和德育课程学分:"; cin >> students[i].name >> students[i].chinese >> students[i].math >> students[i].english >> students[i].cultural_credits >> students[i].moral_credits; students[i].cultural_points = calculate_cultural_points(students[i].chinese, students[i].math, students[i].english); students[i].comprehensive_points = calculate_comprehensive_points(students[i].cultural_points, students[i].moral_credits); } bubble_sort(students, n); print_scholarship_list(students, n); return 0; } ``` 这个程序可以实现按照学生综合积分进行排名,并输出奖学金名单。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值