问题描述
背景:
新学期开始,HDU也迎来了50岁生日。不管你的专业是什么,我唯一想告诉你的是:“珍惜大学生活,抓住时间。” 大多数人认为大学生活应该丰富多彩,少一些压力。但实际上,大学生活也很繁琐。如果你想掌握从书中学到的知识,那么应该把大量的闲暇时间花在个人学习和实践上,尤其是后者。我认为你们每个人都应该像在高中时一样采取学习态度。
“没有痛苦,没有收获”,HDU也有奖学金,谁能赢得它?这主要依赖于学生的GPA(成绩平均分)。现在,我要告诉你的规则,
如果有K(K> 0)个课程,第i个课程有学分Ci,你的分数Si,那么结果
GPA =(C1 * S1 + C2 * S2 + ...... + Ci * Si ......) /(C1 + C2 + ...... + Ci ......)(1 <= i <= K,Ci!= 0)
如果存在0 <= Si <60,GPA总是不存在。
新学期开始,HDU也迎来了50岁生日。不管你的专业是什么,我唯一想告诉你的是:“珍惜大学生活,抓住时间。” 大多数人认为大学生活应该丰富多彩,少一些压力。但实际上,大学生活也很繁琐。如果你想掌握从书中学到的知识,那么应该把大量的闲暇时间花在个人学习和实践上,尤其是后者。我认为你们每个人都应该像在高中时一样采取学习态度。
“没有痛苦,没有收获”,HDU也有奖学金,谁能赢得它?这主要依赖于学生的GPA(成绩平均分)。现在,我要告诉你的规则,
如果有K(K> 0)个课程,第i个课程有学分Ci,你的分数Si,那么结果
GPA =(C1 * S1 + C2 * S2 + ...... + Ci * Si ......) /(C1 + C2 + ...... + Ci ......)(1 <= i <= K,Ci!= 0)
如果存在0 <= Si <60,GPA总是不存在。
输入
第一个数字N表示有N个测试用例(N <= 50)。在每一种情况下,都有一个数字K(总课程数),然后是K行,每行将服从格式:课程名称(长度<= 30),学分(<= 10),分数(<= 100 )。
注意:课程名称中没有空白。所有的输入都是合法的
注意:课程名称中没有空白。所有的输入都是合法的
产量
输出如上所述的每种情况下的GPA,如果GPA不存在,输出:“对不起!”,否则只输出四舍五入到小数点后两位数的GPA值。两个测试用例之间有一条空白线。
示例输入
2
3
算法3 97
DataStruct 3 90
软件项目4 85
2
数据库4 59
英语4 81
示例输出
90.10
Sorry!
知识补充(借鉴:https://blog.csdn.net/moqingxinai2008/article/details/53908265)
1.在scanf中使用,则添加了*的部分会被忽略(跳过),不会被参数获取。
例如:
- int a,b;
- char b[10];
- scanf("%d%*s",&a,b);
12 abc
那么12将会读取到变量a中,但是后面的abc将在读取之后抛弃,不赋予任何变量(例如这里的字符数组b)
用*和扫描集配合,可以从输入中只选出需要的内容,而忽略其余的东西。
另外,也常用于清空缓冲区。
2.在printf中使用,*表示用后面的形参替代*的位置,实现动态格式输出。
例如:
- printf("%*s", 10, s); /*意思是输出字符串s,但至少占10个位置,不足的在字符串s左边补空格,这里等同于printf("%10s", s);*/
- printf("%.*s\n",int,str) ;
- // %.*s 其中的.*表示显示的精度 对字符串输出(s)类型来说就是宽度
- // 这个*代表的值由后面的参数列表中的整数型(int)值给出
- // 例如:
- printf("%.*s\n", 1, "abc"); // 输出a
- printf("%.*s\n", 2, "abc"); // 输出ab
- printf("%.*s\n", 3, "abc"); // 输出abc >3是一样的效果 因为输出类型type = s,遇到'\0'会结束
答案:自己写的,oj不通过。。。mmp;借鉴地址(https://blog.csdn.net/riverflowrand/article/details/44353855)
#include <stdio.h> int main() { int n, k, flag; double a1, a2, cre, sco; scanf("%d", &n); while(n--) { a1 = 0.0; a2 = 0.0; flag = 0; scanf("%d", &k); while(k--) { scanf("%*s%lf%lf", &cre, &sco); if(sco<60) { flag = 1; } a1 += cre * sco; a2 += cre; } if(flag==1) printf("Sorry!\n"); else printf("%.2lf\n", a1 / a2); if(n) printf("\n"); } return 0; }