【每日前端笔试】17春招京东js编程题
算起来,前端也学了有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()里面不可以是数组!