1. 程式人生 > >九度OJ 1133:學分績點 (加權平均數)

九度OJ 1133:學分績點 (加權平均數)

時間限制:1 秒

記憶體限制:32 兆

特殊判題:

提交:1333

解決:702

題目描述:

北京大學對本科生的成績施行平均學分績點制(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
1.一門課程的學分績點=該課績點*該課學分
2.總評績點=所有學科績點之和/所有課程學分之和
現要求你編寫程式求出某人A的總評績點(GPA)。

輸入:

第一行 總的課程數n(n<10);
第二行 相應課程的學分(兩個學分間用空格隔開);
第三行 對應課程的實際得分;
此處輸入的所有數字均為整數。

輸出:

輸出有一行,總評績點,精確到小數點後2位小數。(printf("%.2f",GPA);)

樣例輸入:
5
4 3 4 2 3
91 88 72 69 56
樣例輸出:
2.52

思路:

實際上就是求加權平均數。

程式碼:

#include <stdio.h>
#include <string.h>
 
float getPoint(int x)
{
    if (90 <= x && x <= 100)
        return 4.0;
    else if (85 <= x && x <= 89)
        return 3.7;
    else if (82 <= x && x <= 84)
        return 3.3;
    else if (78 <= x && x <= 81)
        return 3.0;
    else if (75 <= x && x <= 77)
        return 2.7;
    else if (72 <= x && x <= 74)
        return 2.3;
    else if (68 <= x && x <= 71)
        return 2.0;
    else if (64 <= x && x <= 67)
        return 1.5;
    else if (60 <= x && x <= 63)
        return 1.0;
    else
        return 0;
}
 
int main(void)
{
    int cre[10], score[10];
    int n, i, sumCre;
    float sumPoint;
 
    while (scanf("%d", &n) != EOF)
    {
        for (i=0; i<n; i++)
            scanf("%d", &cre[i]);
        for (i=0; i<n; i++)
            scanf("%d", &score[i]);
 
        sumPoint = 0;
        sumCre = 0;
        for (i=0; i<n; i++)
        {
            sumPoint += cre[i] * getPoint(score[i]);
            sumCre += cre[i];
        }
 
        printf("%.2f\n", sumPoint/sumCre);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1133
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:912 kb
****************************************************************/