第一话:HJ1~HJ7
HJ1 字符串最后一个单词的长度
解题思路 & 编码实现
空格分割字符串并将结果存入数组,获取数组最后一个元素的索引,返回最后该索引对应元素的单词长度。
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 计算某字符出现次数
解题思路 & 编码实现
字符串同字符中的字母一起转化为小写,再进行 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 明明的随机数
解题思路 & 编码实现
借助 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 字符串分隔
解题思路 & 编码实现
先补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 进制转换
解题思路 & 编码实现
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 质数因子
解题思路 & 编码实现
质因子就是质数的因子,也称质因数或质约数。
题干输入的整数因式分解,注意的是因子必须都是质数。
循环到平方根:只要判断一半的数就可以了 如果一半的数都没有,说明该数字是个质数。
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 取近似值
解题思路 & 编码实现
分割字符串,查看小数点后一位的数字,大于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);
}
}()