[蓝桥杯]算法提高 GPA
问题描述
输入A,B两人的学分获取情况,输出两人GPA之差。
输入格式
输入的第一行包含一个整数n表示A的课程数,以下n行每行Si,Ci分别表示第i个课程的学分与A的表现。
GPA=Σ(Si*Ci) / Σ(Si)。
特殊地,如果Ci是'P'或者'N'(对应于通过与不通过),则第i个课程不记入GPA的计算(即当其不存在)。
A读入结束后读入B,B的输入格式与A相同。
保证2人的Σ(Si)非零
GPA=Σ(Si*Ci) / Σ(Si)。
特殊地,如果Ci是'P'或者'N'(对应于通过与不通过),则第i个课程不记入GPA的计算(即当其不存在)。
A读入结束后读入B,B的输入格式与A相同。
保证2人的Σ(Si)非零
输出格式
输出A的GPA - B的GPA的值,保留2位小数(四舍五入)
Tips:当A和B的分数相近时输出0.00。
Tips:当A和B的分数相近时输出0.00。
样例输入
2
1 10
2 N
2
1 10
1 5
1 10
2 N
2
1 10
1 5
样例输出
2.50
数据规模和约定
输入的所有数字均为不超过100的非负整数
大晚上不能写题,到点就该睡。。。又钻牛角尖了,一道简单题写了两个小时。。。我弱智了。。。
不 我要甩锅 想到1e-6然后交了无数遍都不行
结果心里告诉自己有可能想复杂了 回去看题 发现精确度并没有那么高 0.01就行
好的 我还是弱智了一把
两个小时看电影他不香吗???
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 6 using namespace std; 7 double gpa[2]; 8 9 int main(){ 10 int n, p, cnt = 2; 11 12 for(int j = 0 ; j < 2 ; j++){ 13 double ans1 = 0, ans2 = 0; 14 cin >> n; 15 for(int i = 0 ; i < n ; i++){ 16 char q[3]; 17 scanf("%d %s", &p, q); 18 19 if(q[0] != 'P' && q[0] != 'N'){ 20 int aa = 0; 21 for(int k = 0 ; k < 3 ; k++){ 22 if(q[k] >= '0' && q[k] <= '9'){ 23 int tt = q[k] - '0'; 24 aa = aa * 10 + tt; 25 } 26 } 27 ans1 += p * aa; 28 ans2 += p; 29 } 30 } 31 gpa[j] = ans1 / ans2; 32 } 33 34 double res = gpa[0] - gpa[1]; 35 if(res >= 0.01 || res <= -0.01) printf("%.2lf\n", res); 36 else cout << "0.00" << endl; 37 38 return 0; 39 }