【网易编程题】小易的英语软件

原题:
小易是班级的英语课代表, 他开发了一款软件开处理他的工作。
小易的软件有一个神奇的功能,能够通过一个百分数来反应你的成绩在班上的位置。“成绩超过班级 …% 的同学”。
设这个百分数为 p,考了 s 分,则可以通过以下式子计算得出 p:
p = ( 分数不超过 s 的人数 - 1) 班级总人数
突然一天的英语考试之后,软件突然罢工了,这可忙坏了小易。成绩输入这些对于字写得又快又好的小易当然没有问题,但是计算这些百分数……这庞大的数据量吓坏了他。
于是他来找到你,希望他编一个程序模拟这个软件:给出班级人数 n,以及每个人的成绩,请求出某几位同学的百分数。


数据结构
vec映射:存放所有同学id以及成绩。
sort_vec数组:存放所有同学id以及成绩,然后根据学生成绩从小到大排序。
m映射:存放成绩以及成绩超过班级百分比。

生成答案:
vec映射保存原始同学的数据,方便根据同学id查询成绩。利用sort_vec数组对同学成绩进行排序。利用排好序的sort_vec数组计算每个成绩所对应的成绩超过班级百分比,存放到m映射中。

答案获取的过程
假设询问同学id。

  1. vec[id]获取同学成绩
  2. m[vec[id]]获取同学成绩所对应的成绩超过班级百分比,这就是答案

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

int cmp(const pair<int, double> &a, const pair<int, double> &b){
    return a.second < b.second;
}

int main(){
    int n;
    cin >> n;
    map<int, double> vec;
    vector<pair<int, double>> sort_vec; 
    
    for (int i = 0; i < n; ++i){
        int s;
        cin >> s;
        vec[i+1] = s;
        sort_vec.push_back(pair<int, double>(i, s));
    }
    
    sort(sort_vec.begin(), sort_vec.end(), &cmp);
    map<int, double> m;
    for (int i = 0; i < sort_vec.size(); ++i){
        m[sort_vec[i].second] = (double)i*100 / sort_vec.size();
    }
    
    int q;
    cin >> q;
    for (int i = 0; i < q; ++i){
        int ind;
        cin >> ind;
        printf ("%.6f\n", m[vec[ind]]);
    }
    
    return 0;
}
发布了133 篇原创文章 · 获赞 2 · 访问量 4566

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/105320219