杭电oj刷题(2061)

Treasure the new start, freshmen!

题目描述:

新的学期即将到来,也正逢杭州电子科技大学50周年校庆。无论你的专业是什么,我唯一要告诉那么的是:“珍惜大学的生活,利用好时间。” 很多人认为大学的生活回是丰富多采。但事实是,大学生活也同样忙碌。如果你要掌握书上的知识,你的空闲时间必须花在自学和实践上,尤其是实践。我认为,作为一位大学生,所有人都必须端正自己的学习态度。
“没有不劳而获的事情”,杭电也设立了奖学金,你能得到吗?它主要依据是学生获得的GPA(测评平均分)。现在,我将告诉你它的规则,你的任务就是编程计算GPA。
假如有K门课程,第i门课的学分为Ci,你的成绩为为Si,则GPA为:
GPA = (C1 * S1 + C2 * S2 +……+Ci * Si……) / (C1 + C2 + ……+ Ci……) (1 <= i <= K, Ci != 0)
如果有一门课程成绩在0到60之间,则GPA将不存在。

Input

The first number N indicate that there are N test cases(N <= 50). In each case, there is a number K (the total courses number), then K lines followed, each line would obey the format: Course-Name (Length <= 30) , Credits(<= 10), Score(<= 100).
Notice: There is no blank in the Course Name. All the Inputs are legal

Output

Output the GPA of each case as discribed above, if the GPA is not existed, ouput:"Sorry!", else just output the GPA value which is rounded to the 2 digits after the decimal point. There is a blank line between two test cases.

Sample Input

2 
3 
Algorithm 3 97 
DataStruct 3 90 
softwareProject 4 85 
2 
Database 4 59 
English 4 81

Sample Output

90.10 
Sorry!

通过答案:

#include<stdio.h>
int main()
{
    int n,k,i,flag; 
    double c,s,gpa,sum,c_sum;
    char str[50];               //课程名 
    while(scanf("%d",&n)!=EOF)
    {
    	while(n--){         
    		flag=0;
    		sum=0;
    		c_sum=0;
    	    scanf("%d",&k);         //课程数 
    	    for(i=0;i<k;i++){
    	    	scanf("%s%lf%lf",str,&c,&s);
    	    	if(s>=0&&s<60){
    	    		flag=1;
				}else{
					sum+=c*s;       //sum=C1 * S1 + C2 * S2 +……+Ci * Si…… 
					c_sum+=c;       //c_sum= C1 + C2 + ……+ Ci……
				}
			}
			gpa=sum/c_sum;  //GPA = (C1 * S1 + C2 * S2 +……+Ci * Si……) / (C1 + C2 + ……+ Ci……)
			if(flag==1){
				printf("Sorry!\n");
			}else{
				printf("%.2lf\n",gpa);
			}
			if(n!=0)           //每种情况中间用空行隔开 
		        printf("\n");
		} 
    }
    return 0;
}
发布了76 篇原创文章 · 获赞 3 · 访问量 1864

猜你喜欢

转载自blog.csdn.net/ZhangShaoYan111/article/details/104315925