招行信用卡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)); #春招#
