• A1012 The Best Rank [排序]


    在这里插入图片描述

    题目大意:现已知n个考生的3门分数,平均分可以按照这三门算出来。然后分别对这四个分数从高到低排序,这样对每个考生来说有4个排名。k个查询,对于每一个学生id,输出当前id学生的最好的排名和它对应的分数,如果名次相同,按照A>C>M>E的顺序输出。如果当前id不存在,输出N/A
    思路:

    1. 先定义个结构体,里面包含了一个分数的数组和对应排名的数组。
    2. 输入后进行排序,排序后存到对应排名的数组中。
    3. 查询的时候还要对查询的人调选排名最高的名词和分数输出,用比较就行了。
    4. 注意排名相等的时候优先输出顺序。
      —————————————————————————
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    struct student
    {
    	int id;
    	int grade[4];
    }stu[2010];
    int Rank[100000000][4] = { 0 };
    char course[4] = {'A','C','M','E'};
    int now = -1;
    bool cmp(student a,student b)
    {
    	return a.grade[now] > b.grade[now];
    }
    int main()
    {
    	int n, m;
    	cin >> n >> m;
    	for (int i = 0; i < n; i++)		
    	{
    		cin >> stu[i].id >> stu[i].grade[1] >> stu[i].grade[2] >> stu[i].grade[3];
    		stu[i].grade[0] = stu[i].grade[1] + stu[i].grade[2] + stu[i].grade[3];
    	}
    
    	for (now = 0; now < 4; now++) //四门成绩
    	{
    		sort(stu, stu+ n, cmp);
    		Rank[stu[0].id][now] = 1; 
    		for (int j = 1; j < n; j++)  //所有同学间比较
    		{
    			if (stu[j].grade[now] == stu[j-1].grade[now])
    				Rank[stu[j].id][now] = Rank[stu[j - 1].id][now];
    			else
    				Rank[stu[j].id][now] = j + 1;
    		}
    	}
    	int query; //查询考生的ID
    	for (int i = 0; i < m; i++)
    	{
    		cin >> query;
    		if (Rank[query][0] == 0)
    			cout << "N/A" << endl;
    		else
    		{
    			int k = 0;
    			for (int j = 0; j < 4; j++)
    			{
    				if (Rank[query][j] < Rank[query][k])
    				{
    					k = j;
    				}
    			}
    			cout << Rank[query][k] << " " << course[k] << endl;
    		}
    	}	
    }
    
    
    
  • 相关阅读:
    编译型语言和解释性语言
    2.变量和基本类型——2.2变量
    2.变量和基本类型——2.1基本内置类型
    1.开始
    机器学习基础—集成学习Bagging 和 Boosting
    C++多态?
    python dataframe数据条件筛选
    UDA机器学习基础—评估指标
    MFC 树形控件
    MFC 列表控件List Control
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13812083.html
Copyright © 2020-2023  润新知