Advertisement

上海计算机学会2020年5月月赛C++丙组T2计算GPA

阅读量:
题目背景

GPA 是 Grade Point Average 的简写,是高校采用的一种评估学生成绩的制度。

题目描述

要计算一个学生的 GPA,先将每门学科的等第换算成为一个绩点,规则为:

  • 等第 A 为 44 分;
  • 等第 B 为 33 分;
  • 等第 C 为 22 分;
  • 等第 D 为 11 分;
  • 如果有 + 号后缀,则加 0.30.3 分。例如 B+ 为 3.33.3 分;
  • 如果有 - 号后缀,则减 0.30.3 分。例如 C- 为 1.71.7 分。

接下来,再计算这些分数的平均数,四舍五入保留两位小数即可获得 GPA。

给定一个字符序列表示小爱每门课程的等第,请计算她的GPA。

输入格式

一个字符序列:表示小爱各门课程的等第,一门课程的等第只可能是 ABCD 中的一个,保证 + 号或 - 号只会出现在字母的后面。

输出格式

一个两位小数:表示输入等第对应的 GPA。

数据范围

记 n 表示输入字符序列的长度,有 1≤n≤10001≤n≤1000。

样例数据

输入:

ABAB

输出:

3.5

说明:

四门课程,GPA计算公式为(4+3+4+3)/4

输入:

A+AA-B-BB+C+

输出:

3.33

说明:

七门课程,GPA计算公式为(4.3+4+3.7+2.7+3+3.3+2.3)/7=3.32857

解析:

本题关键点:字符串轮询并判断第一位不能是”+“或者”-“,代码如下:

复制代码
 #include <iostream>

    
 #include<iomanip>
    
 using namespace std;
    
  
    
 int main(){
    
 	int m,j;
    
 	double sum,avg;
    
 	string s;
    
 	sum=0;
    
 	avg=0;
    
 	j=0;
    
 	cin>>s;
    
 	for(int i=0;i<s.length();i++){
    
 		if(i==0){
    
 			if(s[0]=='+' || s[0]=='-') 
    
 				break;							
    
 		}
    
 		if(s[i]=='A'){
    
 			sum+=4;
    
 			j+=1;
    
 		}else if(s[i]=='B'){
    
 			sum+=3;
    
 			j+=1;
    
 		}else if(s[i]=='C'){
    
 			sum+=2;
    
 			j+=1;
    
 		}else if(s[i]=='D'){
    
 			sum+=1;
    
 			j+=1;
    
 		}else if(s[i]=='+'){
    
 			sum+=0.3;
    
 		}else if(s[i]=='-'){
    
 			sum-=0.3; 
    
 		}						
    
 	}
    
 	avg=sum/j;
    
 	//输出保留2位小数 
    
 	cout<<fixed<<setprecision(2)<<avg<<endl;
    
 	return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~