算个绩点吧~
百分制 | 等级制 | 绩点 |
---|---|---|
95-100 | A+ | 4.0 |
90-94 | A | 4.0 |
85-89 | A- | 3.7 |
81-84 | B+ | 3.3 |
78-80 | B | 3.0 |
75-77 | B- | 2.7 |
72-74 | C+ | 2.3 |
68-71 | C | 2.0 |
64-67 | C- | 1.7 |
60-63 | D | 1.0 |
60以下 | F | 0 |
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;
}