1007 - 平均绩点
时间限制 : 1 秒
内存限制 : 32 MB
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
题目输入
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
题目输出
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
输入/输出样例
输入格式
A B C D F B F F C C A D C E F
输出格式
2.00 1.83 Unknown
C语言解答
#include<stdio.h> #include<string.h> int main() { char a[80]; int i,l,n; double s; while(gets(a)) { l=strlen(a); for(n=s=i=0;i<l;i=i+2) { if(a[i]=='A') s+=4; else if(a[i]=='B') s+=3; else if(a[i]=='C') s+=2; else if(a[i]=='D') s+=1; else if(a[i]!='F') n++; } printf(n?"Unknown\n":"%.2lf\n",s/((l+1)/2)); } return 0; }
C++解答
#include<stdio.h> #include<string.h> int main() { char a[80]; int i,l,n; double s; while(gets(a)) { l=strlen(a); for(n=s=i=0;i<l;i=i+2) { if(a[i]=='A') s+=4; else if(a[i]=='B') s+=3; else if(a[i]=='C') s+=2; else if(a[i]=='D') s+=1; else if(a[i]!='F') n++; } printf(n?"Unknown\n":"%.2lf\n",s/((l+1)/2)); } return 0; }
Java解答
import java.text.DecimalFormat; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String line = scanner.nextLine(); String[] str = line.split("\\s+"); int length = str.length; double sum = 0; boolean flag = false; for (int i = 0; i < length; i++) { String s = str[i].trim(); if (s.length() == 1) { char ch = s.charAt(0); double n = getScore(ch); if (n == -1) { flag = true; System.out.println("Unknown"); break; } else { sum += (double)n + 0.0001; } } else { // flag = true; // System.out.println("Unknown"); // break; } } if (flag) continue; DecimalFormat df = new DecimalFormat("0.00"); System.out.println(df.format(sum / (double)length)); } } public static double getScore(char ch) { switch (ch) { case 'A': return 4; case 'B': return 3; case 'C': return 2; case 'D': return 1; case 'F': return 0; default: return -1; } } }
Python解答
#coding = utf-8 import re import sys f = sys.stdin; #f = open('test.in', 'r'); def GetAns(line): markSet = ['A', 'B', 'C', 'D', 'F',]; hashVal = { 'A':4, 'B':3, 'C':2, 'D':1, 'F':0 }; ave = 0.0; for var in line: if( markSet.count(var) > 0 ): ave += hashVal[var]; else: return 'Unknown'; return ('%.2lf'%(1.0*ave/len(line))); for line in f: line = line.split(' '); line[len(line)-1] = line[len(line)-1][:-1]; print (GetAns(line));