牛客网:华为机试 第一话——HJ1~HJ7

141 阅读2分钟

第一话:HJ1~HJ7

HJ1 字符串最后一个单词的长度

image.png

解题思路 & 编码实现

空格分割字符串并将结果存入数组,获取数组最后一个元素的索引,返回最后该索引对应元素的单词长度。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        // 转数组,最后返回数组中最后一个元素(字符串)的长度
        let tokens = line.split(" ");
        console.log(tokens[tokens.length - 1].length);
    }
})();

HJ2 计算某字符出现次数

image.png

解题思路 & 编码实现

字符串同字符中的字母一起转化为小写,再进行 for 遍历!!!

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        // 一个由字母、数字和空格组成的字符串 全转化为小写
        let tokens = line.toLowerCase();
        // 接收一个字符
        let str = await readline();
        let count = 0;
        for (const e of tokens) {
            // 不计较大小写
            if (e == str.toLowerCase()) {
                count++;
            }
        }
        console.log(count);
    }
})();

HJ3 明明的随机数

GP`6OOMN%9E3YSL9RMAX0%3.png

解题思路 & 编码实现

借助 JS 的 includes(),判断数组中是否包含指定的值,包含即跳过该数据,从而得到去重的效果。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        // 存放随机整数的数组
        let arr = [];
        let num = 0;
        for (let i = 0; i < line; i++) {
            num = await readline();
            // 判断数组中是否包含生成的随机数,不包含即放入数组
            if(!arr.includes(num)) {
                arr.push(num);
            }
        }
        // 排序从小到大,换行输出
        console.log(arr.sort((a, b) => a-b).join("\n"))
    }
})();

HJ4 字符串分隔

image.png

解题思路 & 编码实现

先补0,这样最后长度肯定大于8,最后按长度为8拆分每个输入字符串,多余的0不会显示。

substring 的参数一,截取的起始位置;参数二是截取返回这个字符串的结束点,并且不包含这个结束点。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        // 先补0,这样最后长度肯定大于8
        let str = line + "00000000";
        // 上边已经补0,i从8开始 保证substring从0开始
        for (let i = 8; i < str.length; i += 8) {
            console.log(str.substring(i - 8, i));
        }
    }
})();

HJ5 进制转换

image.png

解题思路 & 编码实现

Number.parseInt() 方法可以根据给定的进制数把一个字符串解析成整数。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        console.log(Number.parseInt(line + "", 16));
    }
}()

HJ6 质数因子

image.png

解题思路 & 编码实现

质因子就是质数的因子,也称质因数或质约数。

题干输入的整数因式分解,注意的是因子必须都是质数。

循环到平方根:只要判断一半的数就可以了 如果一半的数都没有,说明该数字是个质数。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        // 转化为整数
        let tokens = parseInt(line);
        // 平方根
        let sqrtNum = Math.sqrt(tokens);
        // 保存结果
        let result = '';
        for(let i = 2; i <= sqrtNum; i ++) {
            // 获取因子
            while(tokens % i === 0) {
                result += i + ' ';
                tokens /= i;
            }
        }
        if(tokens != 1) {
            result += tokens;
        }
        console.log(result);
    }
}()

HJ7 取近似值

3BYWG(%`NN_A9X~38EZIL.png

解题思路 & 编码实现

分割字符串,查看小数点后一位的数字,大于5,整数+1

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        let tokens = line.split('.');
        let res = parseInt(tokens[0]);
        let b = parseInt(tokens[1][0]);
        if(b >= 5){
            res++;
        }
        console.log(res);
    }
}()