上海计算机学会2021年7月月赛C++丙组T2选科组合
发布时间
阅读量:
阅读量
该问题涉及高考选科组合的选择与分数计算。题目要求根据给定的6门科目成绩(物理、化学、生物、历史、地理、政治),从中选择3门科目使得总分最高。输入为6个正整数表示各科成绩,输出为所选3门科目的最高总分。
具体来说:
输入格式:一行6个正整数
输出格式:一行一个整数表示最高总分
解决方法:
- 方法一:对6门成绩进行排序后取前三名相加
- 方法二:通过循环找出三个最大值相加
例如:
输入:90 88 85 93 75 87
输出:271
解释:选择物理(90)、化学(88)、历史(93),总分为271
选科组合
内存限制: 256 Mb时间限制: 1000 ms
题目描述
自2017年起,上海高考正式实施3+1 模式,随后变为3+3 模式,即语文.数学.外语三门科目必考,考生需从物理.化学.生物.历史.地理及政治这六科中选择三科参加考试,并取消文理分科的规定。面临选科的选择压力的小爱同学近期收到一次重要考试成绩表,并据此做出选科决定。
已知学生在物理、化学以及生物等学科中的成绩分别为a到f分数,请问小爱若选择参加高考的三门科目最多能获得多少分数?
输入格式
输入共一行,6个正整数,分别表示小爱的6科成绩
输出格式
输出共一行,输出小爱选择3门考试科目所能得到的最高分分值。
数据范围
0≤a,b,c,d,e,f≤100
样例数据
输入:
90 88 85 93 75 87
输出:
271
说明:
选择物理、化学、历史三门课,所得分数最高,分值为90+88+93=271分。
解析:会排序的这题就很简单了,直接排序,取前三的和,详见代码:
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main() {
for (int i = 1; i <= 6; i++) {
cin >> a[i];
}
sort(a, a + 6);
int ans = 0;
for (int i = 4; i <= 6; i++) {
ans += a[i];
}
cout << ans << endl;
return 0;
}
如果不会排序,会循环,则可以用两层循环,求三次最大值,详见代码:
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main() {
for (int i = 1; i <= 6; i++) {
cin >> a[i];
}
int ans = 0;
for (int i = 1; i <= 3; i++) {//求三次最大值
int mx=0;
int k=0;
for(int j=1;j<=6;j++){//6个数里找最大值
if (a[j]>mx){
mx=a[j];
k=j;//记录最大值的位置
}
}
a[k]=0;//把最大值变成0,方便求下一个最大值
ans+=mx;
}
cout << ans << endl;
return 0;
}
全部评论 (0)
还没有任何评论哟~
