美文网首页程序员让前端飞
【每日前端笔试】17春招京东js编程题

【每日前端笔试】17春招京东js编程题

作者: M_Jehol | 来源:发表于2017-04-09 12:56 被阅读0次

    算起来,前端也学了有4个月了,春招参加了很多笔试,但是结果都不如意。

    前几天看到有大神说自己找不到实习,回头想想自己,

    什么也都不会,笔试从来ac不了,那怎么找实习呢?

    不要着急,慢慢来,总会找到自己的方向的!

    我在笔试时,逻辑十分混乱,obj属性就有3个,循环了4次,还排序了3次,才勉勉强强ac了0.1,最后发现理解错题意了,悲催

    所以,下次做题前,一定一定完全理解题意!

    题目描述

    公司最近新研发了一种产品,共生产了n件。有m个客户想购买此产品,第i个客户出价Vi元。为了确保公平,公司决定要以一个固定的价格出售产品。每一个出价不低于要价的客户将会得到产品,余下的将会被拒绝购买。请你找出能让公司利润最大化的售价。

    输入

    输入第一行二个整数n(1<=n<=1000),m(1<=m<=1000),分别表示产品数和客户数。

    接下来第二行m个整数Vi(1<=Vi<=1000000),分别表示第i个客户的出价。

    输出

    输出一行一个整数,代表能够让公司利润最大化的售价。

    自己ide编写

    var n=5;

    var m=4;

    var arr=[2,8,10,7];

    var temp={//保存最终结果数据

    price:0,

    profit:0

    }

    for (var i = 0; i < m; i++) {//外层循环,获取每一个价格

    var price=arr[i];

    var count=n;

    var profit=0;

    for (var j = 0; j < m; j++) {//内层循环,如果小于price,利润+price

    if (count<1) {break;}

    if (arr[j]>=price) {

    profit+=price;

    count--;//控制件数

    }

    }

    if (profit>temp.profit) {

    temp.price=price;

    temp.profit=profit;

    }

    }

    document.write(temp.profit+'  '+temp.price);

    这个版本ac0.4

    所有测试数据正确率为40.00000059604645%!

    可以尝试再次完善代码,并调试,争取全部AC通过

    和正确结果对比,发现是输入格式有问题,

    我的是(没有考虑一行写不下,会到多行)

    var line;

    line=read_line().split(' ');

    var n=parseInt(line[0]);

    var m=parseInt(line[1]);

    var arr = [];

    var nextline;

    nextline=read_line().split(' ');

    for(var i=0;i<m;i++){

    arr.push( parseInt(nextline[i]));

    }

    而正确答案是

    var line;

    var arr=[];

    while(line=read_line()){

    line=line.split(' ');

    for(var i=0;i<line.length;i++){

    line[i]=parseInt(line[i]);

    }

    arr=[].concat(arr,line);

    }

    n=arr[0];

    m=arr[1];

    arr.shift();

    arr.shift();

    然而,这不是最好的办法

    这个解法和我当时笔试时想的一样,但他的非常简洁

    var n=5;

    var m=4;

    var arr1=[2,8,10,7];

    var temp={//保存最终结果数据

    price:0,

    profit:0

    }

    var arr=arr1.sort(function(a,b){

    return b-a;//降序

    });

    //document.write(arr);

    for (var i = 0; i < m; i++) {//外层循环,获取每一个价格

    var price=arr[i];

    var count=n;

    var profit=0;

    profit=price*Math.min(n,i+1);

    if (profit>temp.profit) {

    temp.price=price;

    temp.profit=profit;

    }

    }

    document.write(temp.price);

    这个一次就过了,开心!

    ps:Math.min()里面不可以是数组!

    相关文章

      网友评论

        本文标题:【每日前端笔试】17春招京东js编程题

        本文链接:https://www.haomeiwen.com/subject/zlhdattx.html