HDU-#4802 GPA

        题目大意:给出一张表以及对应的权值,要求计算GPA的结果。

        解题思路:可以直接暴力求解,也可以将表进行对应的Hash处理。详见code。

       题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4802

      暴力code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 3;
int n,d,cnt;
double ans;
char str[MAXN];

int main(){
    //freopen("input.txt","r",stdin);
    while(~scanf("%d",&n)){
        cnt=0;ans=0;
        for(int i=0;i<n;++i){
            scanf("%d %s",&d,&str);
            if(str[0]=='P' || str[0]=='N'){
                ans+=0;
                continue;
            }
            cnt+=d;
            if(str[0]=='A'){
                if(str[1]=='-') ans+=d*3.7;
                else ans+=d*4.0;
            }
            if(str[0]=='B'){
                if(str[1]=='-') ans+=d*2.7;
                else if(str[1]=='+') ans+=d*3.3;
                else ans+=d*3.0;
            }
            if(str[0]=='C'){
                if(str[1]=='+') ans+=d*2.3;
                else if(str[1]=='-') ans+=d*1.7;
                else ans+=d*2.0;
            }
            if(str[0]=='D'){
                if(str[1]=='-') ans+=d*1.0;
                else ans+=d*1.3;
            }
            if(str[0]=='F'){
                ans+=d*0;
            }
        }
        if(cnt==0) printf("0.00\n");
        else printf("%.2f\n",ans/cnt);
    }
    return 0;
}

        Hash code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;

int n,cnt,num;
double ans;
string str;
map<string,double> m;

void init(){
    m["A"]=4.0;m["A-"]=3.7;
    m["B"]=3.0;m["B+"]=3.3;m["B-"]=2.7;
    m["C"]=2.0;m["C+"]=2.3;m["C-"]=1.7;
    m["D"]=1.3;m["D-"]=1.0;m["F"]=0;
}

int main(){
    //freopen("input.txt","r",stdin);
    init();
    while(~scanf("%d",&n)){
        cnt=0;ans=0;
        for(int i=0;i<n;++i){
            cin>>num>>str;
            if(str=="P" || str=="N") continue;
            cnt+=num;
            ans+=num*m[str];
        }
        if(cnt==0) printf("0.00\n");
        else printf("%.2f\n",ans/cnt);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值