招行信用卡2018春招笔试题解
虽然前面很多选择题不会做,不过编程题还是挺简单的,全AC。
(终于能全AC了,莫名开心)
第一题
比较简单
let line=readline().split(" "); line=line.map(i=>parseInt(i)); let n=line.shift(); line.sort((a,b)=>a-b); if(line[0]!=0) console.log("0"); for(let i=0;i<line.length-1;i++){ if(line[i+1]-line[i]>1){ console.log(line[i]+1); } }
第二题
要用动态规划
主要注意的点就是条件的判断
如果dp[i+1]已经求出来了,那么dp[i]就是dp[i-1]和dp[i+1]的较小者+1
如果dp[i+1]没有求出来了,那么dp[i]就是dp[i-1]+1
let x=readline(); x=parseInt(x); if(x<0) x=-x; let i=1,dp=[]; dp[0]=0; while(i<=x){ if(!dp[i]&&dp[i+1]) dp[i]=Math.min(dp[i-1],dp[i+1])+1; else if(!dp[i]&&!dp[i+1]){ dp[i]=dp[i-1]+1; } dp[2*i]=dp[i]+1; i++; } console.log(dp[x]);
第三题
还是要用动态规划,这是剑指offer上的原题,丑数那一题。
庆幸自己前段时间做了这题。
我一开始使用暴力解法,只达到了83%
后来使用了动态规划就AC了
let n=readline(); n=parseInt(n); function getNum(n){ if(n<7) return index; let res=[]; res[0]=1; let t2=0,t3=0,t5=0; for(let i=1;i<n;i++){ res[i]=Math.min(...[res[t2]*2,res[t3]*3,res[t5]*5]); if(res[i]==res[t2]*2) t2++; if(res[i]==res[t3]*3) t3++; if(res[i]==res[t5]*5) t5++; } return res[n-1]; } console.log(getNum(n));
#春招#