高校联盟14 GPA(水题)

算个绩点吧~

百分制等级制绩点
95-100A+4.0
90-94A4.0
85-89A-3.7
81-84B+3.3
78-80B3.0
75-77B-2.7
72-74C+2.3
68-71C2.0
64-67C-1.7
60-63D1.0
60以下F0

Format

Input

多组测试数据
每组测试数据第一行一个整数N(N<=100),表示需要计算的课程数
接下来N行,每行描述一门课程,每行第一个整数为学分C(1<=C<=6),第二个为整数或字符串,为百分制成绩或等级制成绩

Output

每组测试数据输出一行,一个整数和一个3位小数(四舍五入),分别为最终的总学分数和加权绩点

忽略每行输出的末尾多余空格

样例输入
4
3 86
1 93
2 79
4 68
4
3 A+
3 B
6 C+
4 A-
2
3 83
4 D
样例输出
10 2.910
16 3.100
7 1.986

还是太菜,很弱智的一道题,写的时候bug不断,才知道string不能用%s接收,因为这个崩了好几次OTZ

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include <stdio.h>
#include <ctype.h>
using namespace std;
const int maxn=100+5;
int sum;
struct node
{
    double xuefen;double jidian;
}p[maxn];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        //cout<<n<<endl;
        sum=0;
        int cnt=0;
        while(n--){
        int a;
        string c="";
        scanf("%d",&a);  
        cin>>c;  //这里注意不能用%s接收
        //cout<<a<<c<<endl;
        p[cnt].xuefen=a;
        if(isdigit(c[0]))
        {
            int s=0;
            for(int i=0;i<c.length();i++)
            {
                s=s*10+c[i]-'0';
            }
            if(s>=95) p[cnt].jidian=4.0;
            else if(s>=90&&s<=94) p[cnt].jidian=4.0;
            else if(s>=85&&s<=89) p[cnt].jidian=3.7;
            else if(s>=81&&s<=84) p[cnt].jidian=3.3;
            else if(s>=78&&s<=80) p[cnt].jidian=3.0;
            else if(s>=75&&s<=77) p[cnt].jidian=2.7;
            else if(s>=72&&s<=74) p[cnt].jidian=2.3;
            else if(s>=68&&s<=71) p[cnt].jidian=2.0;
            else if(s>=64&&s<=67) p[cnt].jidian=1.7;
            else if(s>=60&&s<=63) p[cnt].jidian=1.0;
            else if(s<60) p[cnt].jidian=0.0;
        }
        else
        {
            if(c=="A+") p[cnt].jidian=4.0;
            else if(c=="A") p[cnt].jidian=4.0;
            else if(c=="A-") p[cnt].jidian=3.7;
            else if(c=="B+") p[cnt].jidian=3.3;
            else if(c=="B") p[cnt].jidian=3.0;
            else if(c=="B-") p[cnt].jidian=2.7;
            else if(c=="C+") p[cnt].jidian=2.3;
            else if(c=="C") p[cnt].jidian=2.0;
            else if(c=="C-") p[cnt].jidian=1.7;
            else if(c=="D") p[cnt].jidian=1.0;
            else if(c=="F") p[cnt].jidian=0.0;
        }
        cnt++;sum+=a;
        //  cout<<cnt<<endl;

    }
    double ans=0.0;
       for(int i=0;i<cnt;i++)   //这里不能用n了,因为我已经把n的值给改了,之前这也错了ORZ
       {
           ans+=p[i].jidian*p[i].xuefen;
       }

  cout<<sum;
  printf(" %.3f\n",ans/sum);
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值