3 Star 60 Fork 5

programmercarl / kamacoder-solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0007.平均绩点.md 5.59 KB
一键复制 编辑 原始数据 按行查看 历史

7.平均绩点

题目链接

C++

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
    string s;
    while (getline(cin, s)) { // 接受一整行字符串
        float sum = 0;
        int count = 0;
        int flag = 1;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == 'A') {sum += 4; count++;}
            else if (s[i] == 'B') {sum += 3; count++;}
            else if (s[i] == 'C') {sum += 2; count++;}
            else if (s[i] == 'D') {sum += 1; count++;}
            else if (s[i] == 'F') {sum += 0; count++;}
            else if (s[i] == ' ') continue;
            else {
                flag = 0;
                cout << "Unknown" << endl;
                break;
            }
        }
        if (flag) printf("%.2f\n", sum / count);
    }
    return 0;
}

Java

import java.util.*;
import java.lang.*;


public class Main{
    public static Map<String,Integer> map = new HashMap<>();
    static{
        map.put("A",4);
        map.put("B",3);
        map.put("C",2);
        map.put("D",1);
        map.put("F",0);
    }
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            String[] items = line.split(" ");
            double sum = 0.0;
            int count = 0;
            boolean flag = false;
            for(String item:items){
                if(map.get(item) != null){
                    sum += map.get(item);
                    count++;
                }else{
                    flag = true;
                }
            }
            if (flag) {
                System.out.println("Unknown");
            } else {
                System.out.printf("%.2f\n", sum / count);
            }
        }
    }
}

python

'''
1) 构建成绩映射字典;
2) 遍历每门成绩, 若不在字典里, 则返回'Unknown', 否则累加成绩, 最终算平均值

时间复杂度: O(n)
空间复杂度: O(n)
'''


class Solution():
 
    def cal_avg_score(self, datas=[], level_map_dict={}):
    		#计算平均成绩
        total_sum = 0
        for score in datas:
            if score in level_map_dict:
                total_sum += level_map_dict[score]
            else:
                return 'Unknown'
        return '{:.2f}'.format(float(total_sum) / len(datas))

    def main(self, ):
      	#构建映射字典
        level_map_dict = {'A': 4, 'B': 3, 'C': 2, 'D': 1, 'F': 0}
        while True:
            try:
              	 #获取每行输入
                input_datas = list(input().split())  
                 #调用cal_avg_score,得到每行输出
                print(self.cal_avg_score(datas=input_datas, level_map_dict=level_map_dict))
            # EOFError: EOF when reading a line
            except EOFError as e:
                break


solution_obj = Solution()
solution_obj.main()

Go

package main

import(
    "bufio"
	"fmt"
	"os"
	"strings"
)

func main(){
    //创建一个bufio.Reader对象,用于从标准输入(即键盘)读取数据
    reader := bufio.NewReader(os.Stdin)
    score := map[string]float64{"A":4, "B":3, "C":2, "D":1, "F":0}
    for{
        avg := 0.0
        flag := true
        grade, _, err := reader.ReadLine()
        grade_list := strings.Split(string(grade), " ")
        //如果err的值不等于nil,则表示输入结束
        if err != nil{
            break
        }
        for i := 0; i < len(grade_list); i++{
            //ok表示字典中是否包含该key
            value, ok := score[grade_list[i]]
            if ok == false{
                flag = false
                fmt.Println("Unknown")
                break
            }
            avg = avg + value
        }
        if flag{
            avg = float64(avg)/float64(len(grade_list))
            fmt.Println(fmt.Sprintf("%.2f", avg))
        }
    }
}

Js

// 引入readline模块读取输入
const readline = require("readline");
// 创建readline接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

function processInput() {
    // 用map存储分数和字母的对应关系
    let map = new Map();
    map.set("A", 4);
    map.set("B", 3);
    map.set("C", 2);
    map.set("D", 1);
    map.set("F", 0);
    
    rl.on("line", (input) => {
        let arr = input.split(" ");
        let res = 0;
        let sumScore = 0;
        for (let i = 0; i < arr.length; i++) {
            if (map.has(arr[i])) {
                sumScore += map.get(arr[i]);
            } else {
                res = "Unknown"
                break
            }
        }
        res = res == "Unknown" ?  "Unknown" : (sumScore / arr.length).toFixed(2)
        console.log(res)
    });
}
processInput();

C

#include <stdio.h>
#include <string.h>

int main() {
    char s[100];
    while (fgets(s, sizeof(s), stdin)) { // 接受一整行字符串
        float sum = 0;
        int count = 0;
        int flag = 1;
        for (int i = 0; i < strlen(s); i++) {
            if (s[i] == 'A') { sum += 4; count++; }
            else if (s[i] == 'B') { sum += 3; count++; }
            else if (s[i] == 'C') { sum += 2; count++; }
            else if (s[i] == 'D') { sum += 1; count++; }
            else if (s[i] == 'F') { sum += 0; count++; }
            else if (s[i] == ' ' || s[i] == '\n') continue;
            else {
                flag = 0;
                printf("Unknown\n");
                break;
            }
        }
        if (flag) printf("%.2f\n", sum / count);
    }
    return 0;
}
1
https://gitee.com/programmercarl/kamacoder-solutions.git
git@gitee.com:programmercarl/kamacoder-solutions.git
programmercarl
kamacoder-solutions
kamacoder-solutions
main

搜索帮助