程序员让前端飞

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

2017-04-09  本文已影响0人  M_Jehol

算起来,前端也学了有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()里面不可以是数组!

上一篇下一篇

猜你喜欢

热点阅读