牛客网华为机试 JavaScript V8(一小部分)

HJ6 质数因子
let num = parseInt(readline())
let arr = []
for (let i=2; i*i<=num; i++) {		// 使用 i*i 判断可以降低复杂度,使用 i<=num 可能会超时
    while (num%i == 0) {
        num /= i
        arr.push(i)
    }
}
if (num > 1) arr.push(num)
let result = arr.join(' ') + ' '
console.log(result)
HJ8 合并表记录
let n = parseInt(readline())
let obj = {}
for (let i=0; i<n; i++) {
    let arr = readline().split(' ')
    let key = arr[0], value = arr[1]
    if (!obj[key]) {
        obj[key] = parseInt(value)
    } else {
        obj[key] = obj[key] + parseInt(value)
    }
}
for (let i in obj) {
    console.log(i + ' ' +obj[i] + ' ')
}
HJ9 提取不重复的整数
let str = readline()
let arr = str.split('').reverse()			// 转数组后倒序
let uniqueArr = Array.from(new Set(arr))	// 利用 set 去重
console.log(uniqueArr.join(''))				// 数组 join 连接后作为字符串输出
HJ31 单词倒排【字符串】【排序】

描述
对字符串中的所有单词进行倒排。

说明:

  1. 构成单词的字符只有26个大写或小写英文字母;
  2. 非构成单词的字符均视为单词间隔符;
  3. 要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
  4. 每个单词最长20个字母;

数据范围:字符串长度满足

输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序

题解:

let str = readline() 
let arr = str.split(/[^a-zA-Z]/) //使用正则分割字符串
console.log(arr.reverse().join(' '))
HJ66 配置文件恢复

描述
有6条配置命令,它们执行的结果分别是:

命 令 执 行
reset reset what
reset board board fault
board add where to add
board delete no board at all
reboot backplane impossible
backplane abort install first
he he unknown command
注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配:
1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但匹配命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unknown command
3、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果仍不唯一,匹配失败。
例如输入:r b,找到匹配命令reset board 和 reboot backplane,执行结果为:unknown command。
例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
4、若输入两字串,则先匹配第一关键字,如果有匹配,继续匹配第二关键字,如果唯一,匹配成功。例如输入:bo a,确定是命令board add,匹配成功。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:b addr,无法匹配到相应的命令,所以执行结果为:unknow command。
6、若匹配失败,打印“unknown command”

注意:有多组输入。
数据范围:数据组数:,字符串长度
进阶:时间复杂度:,空间复杂度:
输入描述:
多行字符串,每行字符串一条命令

输出描述:
执行结果,每条命令输出一行
题解:

let singleCmd = {
    reset: 'reset what'
}
let twoCmd = {
    'reset board': 'board fault',
    'board add': 'where to add',
    'board delete': 'no board at all',
    'reboot backplane': 'impossible',
    'backplane abort': 'install first'
}
let arrCmd
while(arrCmd = readline()) {
    let printCmd = 'unknown command'
    let count = 0
    arrCmd = arrCmd.split(' ')
    if (arrCmd.length == 1) {
        for (let cmd in singleCmd) {
            if (new RegExp(`^${arrCmd[0]}[a-zA-Z]*$`).test(cmd)) {
                printCmd = singleCmd[cmd]
                count++
            }
        }
        if (count>1) printCmd = 'unknown command'
    } else if (arrCmd.length == 2) {
        for (let cmd in twoCmd) {
            if (new RegExp(`^${arrCmd[0]}[a-zA-Z]* ${arrCmd[1]}[a-zA-Z]*$`).test(cmd)) {
                printCmd = twoCmd[cmd]
                count++
            }
        }
        if (count>1) printCmd = 'unknown command'
    }
    print(printCmd)
}
HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序【排序】

描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序
数据范围:1~1000,元素大小满足 0~100000

输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序

输出描述:
输出排好序的数字

示例1
输入:

8
1 2 4 9 3 55 64 25
0

输出:

1 2 3 4 9 25 55 64

示例2
题解:

let n = parseInt(readline())
let arr = readline().split(' ')
let order = parseInt(readline())
let orderedArr = []
if (order == 0) {
    orderedArr = arr.sort((a,b) => a-b)
} else if (order == 1) {
    orderedArr = arr.sort((a,b) => b-a)
}
console.log(orderedArr.join(' '))
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据引用,牛客网华为机试题解的JavaScript版本提供了第11到20题的解答。其中包括了数字颠倒、字符串反转、句子逆序、字符串排序、求int型数据在内存中存储时1的个数、购物单、坐标移动、识别有效的IP地址和掩码并进行分类统计、简单错误记录和密码验证合格程序。 根据引用,题目描述了如何将输入的整数以字符串的形式逆序输出。程序不考虑负数的情况,如果数字中包含0,逆序形式也会包含0。 根据引用,题目描述了如何计算输入的正整数在内存中存储时1的个数。题目要求输入一个整数(int类型),并将该数转换成二进制形式后输出其中1的个数。 需要注意的是,输入和输出的具体实现可能因题目而异,以上引用提供了一些示例代码,但并不代表所有题目的通用解法。正确的输入输出取决于具体题目的要求和所给代码的实现方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JavsScript牛客网华为机试(11-20)题解](https://blog.csdn.net/weixin_43465339/article/details/110709521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值