题目背景
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。
输入格式
一个字符序列:表示小爱各门课程的等第,一门课程的等第只可能是 A
、B
、C
、D
中的一个,保证 +
号或 -
号只会出现在字母的后面。
输出格式
一个两位小数:表示输入等第对应的 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;
}
标签:字符,int,T2,丙组,C++,GPA,课程,序列,输入
From: https://blog.csdn.net/winterling/article/details/137478721