Advertisement

上海计算机学会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)

还没有任何评论哟~