前端机考编程题

本文涵盖了一系列前端编程题目,包括计算立方根、记负数平均值、红draiment走法、自动售货系统、人民币转换等多个实际应用场景的算法实现。通过解决这些题目,读者可以提升在前端开发中的逻辑思维和编程能力。
摘要由CSDN通过智能技术生成

求解立方根

  1. 计算一个浮点数的立方根,不使用库函数。
  2. 保留一位小数。
function kaigeng(number, geng) {
   
    let fu = false;
    if (number < 0) {
   
        number = -number;
        fu = true;
    }
    let gen = 0;
    while(gen**geng <= number) {
   
        gen += 0.001;
    }
    return fu ? -gen : gen;
}

const number = readline();
console.log(kaigeng(number, 3).toFixed(1));

记负均正II

  1. 输入 n 个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
  2. 本题有多组输入数据,输入到文件末尾。
let str;
let arr = [];

while (str = readline()) {
   
    arr.push(Number(str));
}
let arr2 = arr.filter(item => item >= 0);
let arr3 = arr.filter(item => item < 0);
let avg = arr2.length > 0 ? arr2.reduce((t, v) => t + v, 0) / arr2.length : 0;

console.log(arr3.length);
console.log(avg.toFixed(1));

Redraiment的走法

Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?

while(n = readline()) {
   
    let arr = readline().split(' ').map(Number)
    let dp = []
    let res = 0
    for(let i=0; i<n; i++) {
   
        dp[i] = 1
//       遍历j<i的数据,得到新的dp。新的dp为之前的[dp[max]] + 1
//          例如 [2 5 1 5 4 5 ]
//          5>2 dp[1] = dp[0] + 1   = 2
//          1 不大于2 也不大于5 dp[2] = 1
//          5大于2 大于1  dp[3] = 2
//          4大于2 大于1  dp[4] = 2
//          5大于2 大于1  大于4  dp[5] = 3  ==  dp[4] + 1
        for(let j=0;j<i;j++) {
   
            if(arr[j]<arr[i]){
   
//              遍历得到最大的dp[j] 然后+1为最新的dp
                dp[i] = Math.max(dp[j]+1, dp[i])
            }
        }
        res = Math.max(res, dp[i])
    }
    console.log(res)
}

自动售货系统

let line 
while(line = readline()) {
   
    let arr = line.split(';')
    let a = arr.shift()
    let goods = a.split(' ')[1].split('-').map(e=>parseInt(e))
    let goodsMap = {
   
        A1:{
   price:2,count:goods[0],key:'A1'},
        A2:{
   price:3,count:goods[1],key:'A2'},
        A3:{
   price:4,count:goods[2],key:'A3'},
        A4:{
   price:5,count:goods[3],key:'A4'},
        A5:{
   price:8,count:goods[4],key:'A5'},
        A6:{
   price:6,count:goods[5],key:'A6'},
    }
    let money = a.split(' ')[2].split('-').map(e=>parseInt(e))
    let yuxia = 0
    console.log('S001:Initialization is successful')
    for(let i=0;i<arr.length;i++) {
   
        let options = arr[i].split(' ')
        let payMoney = (options[1])
        if(options[0] === 'p') {
   
            if(payMoney != 1 && payMoney != 2 &&payMoney != 5&&payMoney != 10) {
   
               print('E002:Denomination error') 
            } else {
   
//                 console.log(payMoney,'===',payMoney,'===',money)
                if((payMoney == 5 ||payMoney==10) && parseInt(payMoney)>(money[0]*1+money[1]*2)) {
   
                        print('E003:Change is not enough, pay fail') 
                }
                else if(goods[0]==0&&goods[1]==0&&goods[2]==0&&goods[3]==0&&goods[4]==0&&goods[5]==0){
   
                    print("E005:All the goods sold out")
                } else {
   
                    yuxia = parseInt(payMoney) + yuxia
                    if(payMoney==1){
   
                        money[0] = money[0] + 1
                    }
                    if(payMoney==2){
   
                        money[1] = money[1] + 1
                    }
                    if(payMoney==5){
   
                        money[2] = money[2] + 1
                    }
                    if(payMoney==10){
   
                        money[3] = money[3] + 1
                    }
                    print("S002:Pay success,balance=" + yuxia)
                }
            }
        }
        if(options[0] === 'b') {
   
           if(payMoney != 'A1' && payMoney != 'A2' &&payMoney != 'A3'&&payMoney != 'A4'&&payMoney != 'A5'&&payMoney != 'A6') {
   
               print('E006:Goods does not exist') 
            } else {
   
               if(goodsMap[payMoney].count == 0) {
   
                   print('E007:The goods sold out')
               } else if(yuxia<goodsMap[payMoney].price){
   
                   print('E008:Lack of balance')
               } else {
   
                   yuxia = yuxia-goodsMap[payMoney].price
                   print('S003:Buy success,balance='+yuxia)
               }
            }
        }
        if(options[0] === 'c') {
   
            if(yuxia == 0) {
   
                print('E009:Work failure')
            } else {
   
                let count = yuxia
                let num1 = 0
                let num2 = 0
                let num5 = 0
                let num10 = parseInt(count/10)
                
                if (num10>money[3]) {
   
                    num10 = money[3]
                    count = count - money[3]*10
                } else {
   
                    count = count - num10*10
                }
//                 console.log(num10, '===',count)
                if (count > 0) {
   
                    num5 = parseInt(count/5)
                    if (num5>money[2]) {
   
                        num5 = money[2]
                        count = count - money[2]*5
                    } else {
   
                        count = count - num5*5
                    }
                }
//                 console.log(num5, '===',count)
                if (count > 0) {
   
                    num2 = parseInt(count/2)
                    if (num2>money[1]) {
   
                        num2 = money[1]
                        count = count - money[1]*2
                    } else {
   
                        count = count - num2*2
                    }
                }
//                 console.log(num2, '===',count)
                if (count > 0) {
   
                    num1 = count
                }
                yuxia = 0
                money[0] = money[0] - num1
                money[1] = money[1] - num2
                money[2] = money[2] - num5
                money[3] = money[3] - num10
                print('1 yuan coin number='+num1)
                print('2 yuan coin number='+num2)
                print('5 yuan coin number='+num5)
                print('10 yuan coin number='+num10)
            }
        }
        if(options[0].charAt(0) === 'q') {
   
            if(payMoney != '0' && payMoney != '1') {
   
                print('E010:Parameter error')
            } else {
   
                if(payMoney == '0') {
   
                    goodsMap.sort((a,b)=>{
   
                        if(b.count  == a.count ) {
   
                            return a.key < b.key
                        } else {
   
                            return b-a
                        }
                    })
                    for(let e in goodsMap) {
   
                        print(goodsMap[e].key + ' '+goodsMap[e].price + ' ' +goodsMap[e].count)
                    }
                } else {
   
                    print('1 yuan coin number=' + money[0])
                    print('2 yuan coin number=' + money[1])
                    print('5 yuan coin number=' + money[2])
                    print('10 yuan coin number=' + money[3])
                }
            }
        }
    }
}

人民币转换

考试题目和要点:

  1. 中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。

  2. 中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。

  3. 阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如6007.14,应写成“人民币陆仟零柒元壹角肆分“。

  4. 10应写作“拾”,100应写作“壹佰”。例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”

  5. 十万以上的数字接千不用加“零”,例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”

while (line = readline()) {
   
    let number = line.split(".")
    let str = {
   
        "0":"零",
        "1":"壹",
        "2":"贰",
        "3":"叁",
        "4":"肆",
        "5":"伍",
        "6":"陆",
        "7":"柒",
        "8":"捌",
        "9":"玖",
    }
    let [zhengshu,xiaoshu] = number
    let out = ""
    let temp = ""
    for(let i = zhengshu.length-1;i>=0;i--){
   
        temp = zhengshu[i]+temp
        if(temp.length == 4 || i==0){
   
            let s = ""
            if(zhengshu.length-i>4 && zhengshu.length-i<=8){
   
                s = "万"
            }else if(zhengshu.length-i>8 && zhengshu.length-i<=12){
   
                s = "亿"
            }
            out = get_four(temp) + s + out
            temp = ""
        }
    }
    out = out.replace(/^0+/,"")
    out = out.replace(/0+$/,"")
    out = out.replace(/0+/g,"零")
    out = out.replace(/壹拾/g,"拾")
    out = out.replace(/零万/g,"万")
    out = "人民币" + (out==""?"":out + "元") + get_two(xiaoshu)
    console.log(out)
    function get_four(num){
   
        let out = ""
        num = num.padStart(4,"0")
        out = (num[0] == "0"?"0":str[num[0]]+"仟")
            +(num[1] == "0"?"0":str[num[1]]+"佰")
            +(num[2] == "0"?"0":str[num[2]]+"拾")
            +(num[3] == "0"?"0":str[num[3]])
        return out
    }
    function get_two(num){
   
        if(num[0] == "0" && num[1] == "0"){
   
            return "整"
        }else{
   
            return (num[0]=="0"?"":str[num[0]]+"角") + (num[1]=="0"?"":str[num[1]]+"分")
        }
    }
}

记票统计

请实现一个计票统计系统。你会收到很多投票,其中有合法的也有不合法的,请统计每个候选人得票的数量以及不合法的票数。
本题有多组样例输入。

while(s = readline()){
   
    while(isNaN(Number(s))){
   
        s = readline();
    }
    o = {
   };
    readline().trim().split(" ").forEach((obj,index)=>{
   o[obj]=0});
    o['Invalid'] = 0;
    readline();
    readline().trim().split(" ").forEach((obj,index)=>{
   
        if(o[obj]!=undefined){
   
            o[obj]+=1;
        }else{
   
            o['Invalid']++;
        }
    });
 
    Object.keys(o).forEach((obj,i)=>{
   
        console.log(obj+" : "+o[obj]);                      
    }) 
}

数组分组

输入int型数组,询问该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),不是5的倍数也不是3的倍数能放在任意一组,可以将数组分为空数组,能满足以上条件,输出true;不满足时输出false。

while(num = readline()){
   
  let nums = readline().trim().split(' ').map(i =>+i);
  let fs = 0,ts = 0,rs = 0,rl = [];
  for(let n of nums){
   
    if(n % 5 == 0){
   
      fs += n;
    }else if(n % 3 == 0){
   
      ts += n;
    }else{
   
      rs += n;
      rl.push(n);
    }
  }
  let hs = (fs + ts + rs) / 2;
  if(Math.floor(hs) != hs){
   
    console.log(false);
  }else{
   
    console.log(devide(fs, ts, rl, 0));
  }

}
function devide(fs,ts,rl,index){
   //递归
  if(index == rl.length){
   
    return fs == ts;
  }
  return devide(fs + rl
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿赛工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值