爱奇艺前端编程题 欢迎讨论
var numID=read_line().split("").map((item)=>{return parseInt(item)}); var num_1=numID.slice(0,3); var num_2=numID.slice(3); var sum_1=num_1.reduce((a,b)=>{return a+b}); var sum_2=num_2.reduce((a,b)=>{return a+b}); if(sum_1>sum_2){ [num_1,num_2]=[num_2,num_1]; [sum_1,sum_2]=[sum_2,sum_1]; } function doit(num_1,num_2){ var num_1=num_1.sort(); var num_1_min=num_1[0]; var num_1_middle=num_1[1] var min_allow=9-num_1_min; var middle_allow=18-num_1_middle-num_1_min; var max_allow=27-sum_1; var need=sum_2-sum_1; if(sum_1==sum_2){ return 0 } else{ if(need<=min_allow){ return 1 }else if(need<=middle_allow){ return 2 }else{ return 3 } } } print(doit(num_1,num_2))
以上是题目一的代码 已经更改过了(应该得100%了吧,没改之前是91%),思路
先处理各种数据(不在此累述)----判断前后3位数的大小总和然后把小的调到前面方便处理(个人喜好)
关键思路是-------前3位数能提供多少(其中换一个数最大能提供多少,换两个数最大能提供多少),后3位与3位的差值是多少?在那个范围内?范围决定次数!
关键思路是-------前3位数能提供多少(其中换一个数最大能提供多少,换两个数最大能提供多少),后3位与3位的差值是多少?在那个范围内?范围决定次数!
例如 346 878 总和是13,23 相差10 但是346换一个数最大能提供9-3=6<10不够;换两个数最大能提供18-3-4=11>10能够完成任务所以只需要两次 ;
代码比较拙劣,大家看看思路就好;
代码比较拙劣,大家看看思路就好;
var [n,day,index]=read_line().split(" ").map((item)=>{return parseInt(item)}); var food_num=read_line().trim().split(" ").map((item)=>{return parseInt(item)}); var result; while(action=read_line()){ doit(action); } print(result+1) function doit(action){ var temp=+action[2]; var a_b=action[0]; if(a_b==="B"){ food_num[temp-1]--; }else if(a_b==="A"){ food_num[temp-1]++; }else{ return result=false; } var sort_food_arr=food_num.concat().sort((a,b)=>{ return b-a; })//此处可用ES6数组复制Array.from()优化.. result=sort_food_arr.indexOf(food_num[index-1]) //console.log(sort_food_arr,food_num,food_num[index-1],result+1) }第二题相对而言比较简单吧,看懂题意是关键,题目简单但是我好几次都是55%,在反复推敲逻辑和输出数据的值,类型等等后仍然55%.....我想起了前端必备的一句话!!!永远不要相信用户输入的值也是后来让我100%的关键!!!就是
else{ return result=false; }
这个判断 ,加了之后瞬间AC....
WHAT THE !!!!
然后今晚58加油吧,大佬就算了...我给那些和我一样还奋战在一线的同胞们加油!!!
#爱奇艺##前端#WHAT THE !!!!
然后今晚58加油吧,大佬就算了...我给那些和我一样还奋战在一线的同胞们加油!!!