第三天华为机考练习(JavaScript node)
注:华为机试和剑指offer的JavaScript Node的书写方式不同,剑指offer只需学核心代码然后return,华为机试需要自写输入输出,输出console就行。
1.华为机试HJ10字符个数统计
https://www.nowcoder.com/questionTerminal/eb94f6a5b2ba49c6ac72d40b5ce95f50
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
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(str = await readline()){
let count=0
let rankstr=str.split('').sort().join('')
for(let i=0;i<rankstr.length-1;i++){
count=rankstr[i] !== rankstr[i+1] ? count+1 : count;
}
if(str){
count++;
}
console.log(count)
}
}()
2.华为机试HJ46截取字符串
https://www.nowcoder.com/questionTerminal/a30bbc1a0aca4c27b86dd88868de4a4a
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出
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(str = await readline()){
let k=Number(await readline())
let slicestr=str.slice(0,k)
console.log(slicestr)
}
}()
3.华为机试HJ60查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/questionTerminal/f8538f9ae3f1484fb137789dec6eedb9
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
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 num=Number(line)/2
let k=0
while(num-k){
if(priNum(num-k)&&priNum(num+k)) break
k++
}
console.log(num-k)
console.log(num+k)
}
}()
function priNum (num){
if(num===2){
return true
}
for(i=2;i<=Math.sqrt(num);i++){
if(num%i===0){
return false
}
}
return true
}
4.华为机试HJ40统计字符
https://www.nowcoder.com/questionTerminal/539054b4c33b4776bc350155f7abd8f5
输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数。
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 eng=line.match(/[a-zA-Z]/g)
let num=line.match(/[0-9]/g)
let blo=line.match(/[ ]/g)
let els=line.match(/[^a-zA-Z0-9 ]/g)
let elen=eng?eng.length:0
let nlen=num?num.length:0
let blen=blo?blo.length:0
let slen=els?els.length:0
console.log(elen)
console.log(blen)
console.log(nlen)
console.log(slen)
}
}()
5.华为机试HJ14 字符串排序
https://www.nowcoder.com/questionTerminal/5af18ba2eb45443aa91a11e848aa6723
给定 n 个字符串,请对 n 个字符串按照字典序排列。
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(n = await readline()){
let arr=[]
while(n){
n--
let str=await readline()
arr.push(str)
}
arr.sort().forEach(item=>{
console.log(item)
})
}
}()
6.华为机试HJ5 进制转换
https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
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 dec=parseInt(line,16)//2,8,16进制格式的数据转换到10进制数据
//方法二:
let dec=Number(line).toString(10)//任何进制之间的转换
console.log(dec)
}
}()
每天练习算法题针对华为机考
查看5道真题和解析
