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

  • Post author:
  • Post category:其他



原题:


小易是班级的英语课代表, 他开发了一款软件开处理他的工作。

小易的软件有一个神奇的功能,能够通过一个百分数来反应你的成绩在班上的位置。“成绩超过班级 …% 的同学”。

设这个百分数为 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;
}



版权声明:本文为zxc120389574原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。