• 【PAT】B1080 MOOC期终成绩(25 分)


    还是c++好用,三部分输入直接用相同的方法,
    用map映射保存学生在结构体数组中的下标。
    结构体保存学生信息,其中期末成绩直接初始化为-1,
    注意四舍五入
    此题还算简单

    #include<iostream>
    #include<stdio.h>
    #include<map>
    #include<string>
    #include<algorithm>
    using namespace std;
    struct stu{
    	string name;
    	int gp = -1, gm = -1, gf = -1, G = 0;
    }arr[30000];
    int num=0;
    bool cmp(stu A,stu B){
    	if(A.G!=B.G) return A.G>B.G;
    	else return A.name<B.name;
    }
    int main() {
    
    	int P, M, N; 
    	scanf("%d%d%d", &P, &M, &N);
    	map<string, int> mp;			//mp用来保存学生结构体在数组中的下标
    	for (int i = 0; i<P; i++) {//在线编程
    		string id; int score;
    		cin >> id >> score;
    		if(mp.count(id)==0){//如果学生第一次出现
    			mp[id] = num++;
    			arr[mp[id]].name = id;
    		}
    		arr[mp[id]].gp=score;
    	}
    	for (int i = 0; i<M; i++) {//其中
    		string id; int score;
    		cin >> id >> score;
    		if(mp.count(id)==0){//如果学生第一次出现
    			mp[id] = num++;
    			arr[mp[id]].name = id;
    		}
    		arr[mp[id]].gm=score;
    	}
    	for (int i = 0; i<N; i++) {//期末
    		string id; int score;
    		cin >> id >> score;
    		if(mp.count(id)==0){//如果学生第一次出现
    			mp[id] = num++;
    			arr[mp[id]].name = id;
    		}
    		arr[mp[id]].gf=score;
    
    	}
    	for(int i=0;i<num;i++){
    		if(arr[i].gm>arr[i].gf)
    			arr[i].G=(int)(arr[i].gm*0.4+arr[i].gf*0.6+0.5);
    		else
    			arr[i].G=arr[i].gf;
    	}
    	sort(arr,arr+num,cmp);
    	for(int i=0;i<num;i++){
    		if(arr[i].gp>=200&&arr[i].G>=60){
    			cout<<arr[i].name;
    			printf(" %d %d %d %d
    ",arr[i].gp,arr[i].gm,arr[i].gf,arr[i].G);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    一文看懂Fluentd语法
    mongo 使用聚合合并字段
    加速开发流程的 Dockerfile 最佳实践
    nodejs之RSA加密/签名
    nodejs之https双向认证
    自签证书生成
    白话理解https
    一文看懂k8s Deployment yaml
    基于xtermjs实现的web terminal
    intelliJ 中文设置
  • 原文地址:https://www.cnblogs.com/hebust/p/9491351.html
Copyright © 2020-2023  润新知