AcWing 3443.学分绩点

原题链接:AcWing 3443.学分绩点

北京大学对本科生的成绩施行平均学分绩点制(GPA)。

既将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。

公式如下:

实际成绩     绩点 
90——100     4.0 
85——89      3.7 
82——84      3.3 
78——81      3.0 
75——77      2.7 
72——74      2.3 
68——71      2.0 
64——67      1.5 
60——63      1.0 
60以下        0

一门课程的学分绩点 = 该课绩点 × 该课学分

总评绩点 = 所有学科学分绩点之和 / 所有课程学分之和

现要求你编写程序求出某人 A 的总评绩点(GPA)。

输入格式
第一行,总的课程数 n;

第二行,相应课程的学分(两个学分间用空格隔开);

第三行,对应课程的实际得分;

此处输入的所有数字均为整数。

输出格式
输出有一行,总评绩点,精确到小数点后 2 位小数。

数据范围
1≤n≤10,
学分取值范围 [1,10],
课程得分范围 [0,100]。

输入样例:

5
4 3 4 2 3
91 88 72 69 56

输出样例:

2.52

方法一:模拟

思路:

直接模拟就行

C++代码:

#include <iostream>
using namespace std;

const int maxn = 20;

// a存成绩区间的下界 b存绩点
int a[10] = {0, 60, 64, 68, 72, 75, 78, 82, 85, 90};
double b[10] = {0, 1.0, 1.5, 2.0, 2.3, 2.7, 3.0, 3.3, 3.7, 4.0};

// c存学分
int c[maxn];

double get(double x){
    for(int i = 9; i >= 0; i-- ){
        if(x >= a[i]) return b[i];
    }
}

int main(){
    int n;
    cin >> n;
    
    // sum所有学科学分绩点之和 cnt所有课程学分之和
    double sum = 0, cnt = 0;
    
    // 读入学分
    for(int i = 0; i < n; i++ ){
        cin >> c[i];
        cnt += c[i];
    }
    
    // 读入成绩计算绩点
    for(int i = 0; i < n; i++ ){
        int tmp;
        cin >> tmp;
        
        // cout << get(tmp) << endl;
        sum += (get(tmp) * c[i]);
    }
    
    printf("%.2lf", sum / cnt);
    
    return 0;
}

版权声明:本文为cwtnice原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。