牛客网华为OD前端岗位,面试题库练习记录01

news2024/11/26 16:57:20

题目一 质数因子

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
在这里插入图片描述

JavaScript Node ACM模式

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 n = line
        let factors = [];

        for (let i = 2; i <= n; i++) {
            while (n % i === 0) {
                factors.push(i);
                n /= i;
            }
        }

       console.log(factors.join(' '))
    }
})();

获取到的新知识点(之前没有注意过的写法):

var a = 10;

a *= 5;//等值:a=a*5

console.log("a=" + a);

a /= 5;//等值:a =a/5

console.log("a=" + a);

a %= 5;//等值:a=a%5

console.log("a=" + a);

题目二 四舍五入

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。

数据范围:保证输入的数字在 32 位浮点数范围内

JavaScript Node ACM模式

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(Math.round(line))
    }
}()

在这里插入图片描述
考察对于Math库的熟悉程度,下面是一些常用的Math方法和属性
1、Math.PI
该属性保存的是圆周率,可以快速的得到圆周率,从而用于计算圆的相关东西。

2、Math.ceil()
向上取整,只要是小数,就会变成比原来大的整数。

3、Math.floor()
向下取整,只要是小数,无论超过多少,都省略小数部分,变成比原来小的整数,和parseInt类似。

4、Math.round()
小数会进行四舍五入,但只看第一位小数。

5、Math.abs()
取绝对值。

6、Math.sqrt()
开方,只能得到算术平方根。

7、Math.pow(底数,指数)
乘方,按照指定的底数和指数算出结果。

8、Math.max(多个值)和Math.min(多个值)
找出多个值中的最大值和最小值。

9、Math.random()
产生0-1之间的随机小数,但不包括1。

常用案例:0-10的随机整数(包含10)

var res=Math.floor(Math.random()*(10+1))
console.log(res)

题目三 合并表记录

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

输入描述:
先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:
输出合并后的键值对(多行)
在这里插入图片描述

JavaScript Node ACM模式

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
    let arr = [];
    while ((line = await readline())) {
        arr.push(line);
    }
    arr.shift(); 
    let _obj = {}; // 空的对象
    arr.forEach((item) => {
        let _arr = item.split(" ");
        if (_obj[_arr[0]] != undefined) {
            _obj[_arr[0]] = Number(_arr[1]) + Number(_obj[_arr[0]]);
        } else {
            _obj[_arr[0]] = Number(_arr[1]);
        }
    });
    for(let key in _obj){
        console.log(key + " "+ _obj[key] )
    }
})();

主要思路:
① 首先存储记录,用shift()函数剔除键值对个数;
② 新建一个对象,将键值对的index作为属性,value作为属性的值,遍历赋值;
③ for in 遍历展示;

題目四 提取不重复的整数

描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。

输入描述:
输入一个int型整数

输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

在这里插入图片描述

JavaScript Node ACM模式

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
    let arr = []
    while(line = await readline()){
        arr = line.split('')
    }
    arr.reverse();
    arr = [...new Set(arr)];
    console.log(arr.join(''))
}()

思考:
思路就是,转成数组,然后反转,去重;
转数组方法split(‘’)
数组反转reverse()
去重[…new Set(arr)]
数组输出arr.join(‘’)

题目五 字符串个数统计

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

输入描述:
输入一行没有空格的字符串。

输出描述:
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
在这里插入图片描述

JavaScript Node ACM模式

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 = line.split('');
        arr = [...new Set(arr)];
        console.log(arr.length)
    }
}()

思路就是:
split()转成数组,然后去重[…new Set(arr)],输出数组长度就是字符串的个数;

题目六 数字颠倒

字符串反转
在这里插入图片描述

JavaScript Node ACM模式

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(line.split("").reverse().join(""))
    }
}()

核心代码:

line.split("").reverse().join("")

题目七 字符串最后一个单词的长度

在这里插入图片描述

JavaScript Node ACM模式

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 = line.split(' ');
         console.log(arr[arr.length-1].length)
    }
   
}()

核心代码

let arr = line.split(' ');
console.log(arr[arr.length-1].length)

题目八 字符串排序

在这里插入图片描述

JavaScript Node ACM模式

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
    let tokens = []
    while(line = await readline()){
        tokens.push(line)
    }
    tokens.shift()
    tokens.sort()
    tokens.forEach((item)=>{
        console.log(item)
    })
}()

核心代码:

let tokens = []
    while(line = await readline()){
        tokens.push(line)
    }
    tokens.shift()
    tokens.sort()
    tokens.forEach((item)=>{
        console.log(item)
    })

题目九 求int型正整数在内存中存储时1的个数

在这里插入图片描述

JavaScript Node ACM模式

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 =  eval(line).toString(2)
      let arr = num.split('0')
      console.log(arr.join('').length)
    }
}()

用到的知识点:
① eval(line).toString(2)转进制;
② 使用split(‘0’),将字符里面的 0 都给剔除;
③ 然后将所有的 1 拼接,计算该字符串的长度,就是数字 1 的数量;

题目十 坐标移动

在这里插入图片描述

JavaScript Node ACM模式

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
    let x = 0,y = 0;
    let arr = []
    while ((line = await readline())) {
        arr = line.split(';')
    }
    // 字符串 有可能没有ABCD,有可能有多个ABCD,有可能ABCD不是开头,只要不符合规范就抛弃
    // A向左x减,D向右加,W向上Y加,S向下Y减
    let _key = ['A','D','W','S']
    arr.forEach((item)=>{
        if(_key.indexOf(item.slice(0,1)) !== -1 && item.length <= 3 && item.length > 1 && !isNaN(item.slice(1)) ){
            if(item.slice(0,1) == 'A'){
                x = x - Number(item.slice(1));
            }else if(item.slice(0,1) == 'D'){
                x = x + Number(item.slice(1));
            }else if(item.slice(0,1) == 'W'){
                y = y + Number(item.slice(1));
            }else if(item.slice(0,1) == 'S'){
                y = y - Number(item.slice(1));
            }  
        }
    })
    console.log(x+","+y)
})();

重点就是将符合规范的字符串指令给筛选出来;
我的思路是:单个字符串指令的开头必须是ADWS中的一个,然后字符串长度必须是2或者3,然后字符串除去开头,后面的尾部必须是Number,所以就有了

_key.indexOf(item.slice(0,1)) !== -1 && item.length <= 3 && item.length > 1 && !isNaN(item.slice(1)) 

题目十一 简单错误记录

在这里插入图片描述
在这里插入图片描述

JavaScript Node ACM模式

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
    let arr = []; // 记录输入
    while ((line = await readline())) {
        arr.push(line);
    }
    let lastarr = [];
    arr.forEach((item) => {//  获取16字符 和代码和行数
        let _item = item.split(" ");
        let _laststr = _item[0].split("\\");
        if (_laststr[_laststr.length - 1].length > 16) {
            let _len = _laststr[_laststr.length - 1].slice(
                _laststr[_laststr.length - 1].length - 16
            );
            lastarr.push([_len, _item[1]]);
        } else {
            lastarr.push([_laststr[_laststr.length - 1], _item[1]]);
        }
    });
    let _obj = {};
    lastarr.forEach((item, index) => {// 记录出现次数
        let _parm = item[0]+item[1]
        if (_obj[_parm] != undefined) {
            _obj[_parm]++;
        } else if (_obj[_parm] == undefined) {
            _obj[_parm] = 1;
        }
    });
    // 二维数组去重
    let stringarr = lastarr.map(JSON.stringify);
    let uniquesstring = [...new Set(stringarr)];
    lastarr = uniquesstring.map(JSON.parse)

    if(lastarr.length>8){
        lastarr = lastarr.slice(lastarr.length - 8);// 取前8个
    }
    lastarr.forEach((item,index)=>{// 展示
        let _parm = item[0]+item[1]
        console.log(item.join(' ') + " "+_obj[_parm])
    })
})();

解题思路:
① 首先将输入的内容全部记录下来;
② 将文件名(16字符)和行号,放到一个数组中;
③ 用一个对象,记录下出现的次数;
④ 将文件名(16字符)和行号的数组,去重;(二维数组去重方法,和一维数组不太一样)
⑤ 取前八个文件名(16字符)和行号,然后forEach展示;
重点:二维数组去重

 // 二维数组去重
    let stringarr = lastarr.map(JSON.stringify);
    let uniquesstring = [...new Set(stringarr)];
    lastarr = uniquesstring.map(JSON.parse)

题目十二 密码验证合格程序

必备知识:正则;
https://www.cnblogs.com/wanguofeng/p/10731206.html
在这里插入图片描述

JavaScript Node ACM模式

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 regListOne = [/^.{1,8}$/, /(.{3,}).*\1+.*/];
        let firstCheck = regListOne.every((item) => !item.test(line));
        if (firstCheck) {
            // 大小写字母、数字、其他符号(除大小写字母、数字、换行符、空白符)
            let regListTwo = [/[a-z]/, /[A-Z]/, /\d/, /[^a-zA-Z\d\n\s]/];
            let secondCheck = regListTwo.filter((item) => item.test(line));
            let result = secondCheck.length >= 3 ? "OK" : "NG"; // 至少满足三个条件
            console.log(result);
        } else {
            console.log("NG");
        }
    }
})();

题目十三 简单密码

在这里插入图片描述

JavaScript Node ACM模式

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 base = {
            2: "abc",
            3: "def",
            4: "ghi",
            5: "jkl",
            6: "mno",
            7: "pqrs",
            8: "tuv",
            9: "wxyz",
        };
        //先将小写字母替换成数字
        let str1 = str.replace(/[a-z]/g, (x) => {
            for (const [key, value] of Object.entries(base)) {
                if (base[key].includes(x)) {
                    x = key;
                    return x;
                }
            }
        });
        //再将大写字母替换成往后移一位的小写字母,注意字母‘Z’需单独拎出来转变为‘a’
        let str2 = str1.replace(/[A-Z]/g, (x) => {
            x =
                x == "Z"
                    ? "a"
                    : String.fromCharCode(x.toLowerCase().charCodeAt(0) + 1);
            return x;
        });
        console.log(str2)
    }
})();

知识笔记:

① replace()

replace 本身是 JavaScript 字符串对象的一个方法,它允许接收两个参数:

replace([RegExp|String],[String|Function])

第1个参数可以是一个普通的字符串或是一个正则表达式;
第2个参数可以是一个普通的字符串或是一个回调函数;

② Object.entries

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组。
其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。

③ charCodeAt()

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码,返回值是 0 - 65535 之间的整数,表示给定索引处的 UTF-16 代码单元。

字符串中第一个字符的位置为 0, 第二个字符位置为 1,以此类推。

④ fromCharCode()

fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。

注意:该方法是 String 的静态方法,字符串中的每个字符都由单独的 Unicode 数字编码指定。使用语法: String.fromCharCode()。

题目十四 汽水瓶

在这里插入图片描述

JavaScript Node ACM模式

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())) {
        if (line != 0) {
            // let all = 0;
            // fun(line)
            // function fun(num) {   
            //     if (num == 2 || num == 3) {
            //         all = 1 + all;
            //     } else if (num == 1 || num == 0) {
            //         all = all;
            //     } else {
            //         let _more = num % 3;
            //         all = (num-_more)/3 + all;
            //         fun(_more + (num-_more)/3)
            //     }
            // }
            // console.log(all);
            // 另一种解法,两空瓶喝一瓶水
            console.log(Math.floor(parseInt(line) / 2))
            
        }
    }
})();

这个思想很好,两空瓶喝一瓶水,在网上看的,受教了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/877814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【需求输出】用户故事方法

文章目录 1、初识用户故事2、用户故事是描述需求的最好方式3、创建用户故事4、用户故事的分层管理5、编写用户故事的工具 1、初识用户故事 2、用户故事是描述需求的最好方式 3、创建用户故事 4、用户故事的分层管理 5、编写用户故事的工具

0101xss入门及pikachu靶场-xss-web安全-网络安全

文章目录 0 概述1 环境准备2 反射型xss2.1 概述2.1 靶场-反射型xss&#xff08;get&#xff09; 3 存储型xss3.1 概述3.2 靶场-存储型xss 4 DOM型xss4.1 概述4.2 靶场-DOM型xss 5 问题总结6.1 再次启动pikachu容器报错 结语 0 概述 学习路线&#xff0c;如如下图所示&#xff…

基于架构的软件开发方法

基于架构的软件开发方法 基于架构的软件开发方法是由架构驱动的&#xff0c;即指由构成体系结构的商业、质量和功能需求的组合驱动的。使用ABSD 方法&#xff0c;设计活动可以从项目总体功能框架明确就开始&#xff0c;这意味着需求抽取和分析还没有完成(甚至远远没有完成)&am…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…

Linux常用有关目录的基本命令

一、目录管理 1、绝对路径和相对路径&#xff1a; 绝对路径&#xff1a; 路径的写法&#xff0c;由跟目录 / 写起&#xff0c;例如&#xff1a;/usr/share/doc这个目录。 相对路径&#xff1a; 路径的写法&#xff0c;不是由 / 写起&#xff0c;例如由 /usr/share/doc 要到 /u…

如何求解粘聚力和内摩擦角?

1.直接由莫尔应力圆及包络线得到 由于三轴条件下&#xff0c;试样以宏观破裂面破坏&#xff0c;所以试件是以剪切的方式破坏的&#xff0c;根据库伦强度准则&#xff0c;其抗剪强度 τ m \tau_m τm​ 可以通过粘聚力 c c c 和内摩擦角 φ \varphi φ 确定&#xff0c;表示为…

一百五十四、Kettle——Linux上安装Kettle9.3(踩坑,亲测有效,附截图)

一、目的 由于kettle8.2在Linux上安装后&#xff0c;共享资源库创建遇到一系列问题&#xff0c;所以就换成kettle9.3 二、kettle版本以及安装包网盘链接 kettle9.3.0安装包网盘链接 链接&#xff1a;https://pan.baidu.com/s/1MS8QBhv9ukpqlVQKEMMHQA?pwddqm0 提取码&…

【Sklearn】基于决策树算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于决策树算法的数据分类预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理1.1 模型原理1.2 数学模型 2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 决策树是一种基于树状结构的分类和回归模型&#xff0c;它通过一系列…

Kotlin开发笔记:类层次结构和继承

Kotlin开发笔记&#xff1a;类层次结构和继承 简介 面向对象编程的语言中&#xff0c;关于对象层次的抽象是很重要的&#xff0c;这会涉及到类层次的结构&#xff0c;接口和继承等内容&#xff0c;本篇文章将会介绍与之相关的内容&#xff0c;包括&#xff1a; 接口的相关内容…

配置网络设置和修改主机名

bash 题目&#xff1a; 在 node1 上配置网络&#xff0c;要求如下&#xff1a; 主机名&#xff1a;node1.domain8.rhce.cc IP地址: 172.25.250.10/24 ##注意掩码 网关&#xff1a; 172.25.250.250 DNS&#xff1a; 172.25.250.250 ##名称服务器 做法&#xff1a; nmtui 回车…

Modbus RTU校验码CRC16全字节查表的VB6实现方法

全字节表比半字节表数据精简&#xff0c;比纯计算速度快&#xff0c;实现起来方便&#xff0c;但是在VB6下或是在普通单片机上要变通处理&#xff0c;因为双字节变量处理会溢出而数据失真。 先看一下CSDN上网友XCS101的C程序 CRC-16/MODBUS 算法的三种实现方法_crc16modbus校验…

风险区分度—IV、KS和分布

IV和KS是风控中常用的评估指标&#xff0c;用于衡量变量的预测能力和区分度。一般来说&#xff0c;IV和KS值越大&#xff0c;表示该变量的预测能力越强。本文从IV和KS以及两者之间的关系方面作一些思考。 一、IV值 一般来说&#xff0c;IV计算用于筛选变量&#xff0c;常用来评…

记一次现场找不到配置的神奇报错,(其实配置是完整的)

记一次现场找不到配置的神奇报错&#xff0c;&#xff08;其实配置是完整的&#xff09; 问题的原因为因为配置文件中符号的问题。 报错找不到url1 **Notepad**打开的文件 如图是两份看起来一模一样的配置&#xff0c;其中一个就会报错找不到某某配置。 实际有细小的差别 …

纷享销客稳居2022 H2 SFA SaaS 本土CRM厂商市场份额 TOP 1

近期&#xff0c;国际知名研究机构IDC公布了2022年下半年《中国客户关系管理(CRM)SaaS市场跟踪研究报告》&#xff0c;报告全面解析了中国CRM SaaS以及细分市场SFA SaaS的市场现状&#xff0c;并对全球各大厂商在中国SFA市场的份额占比进行了排名。连接型CRM开创者纷享销客在SF…

AAAI 最佳论文列表(1984→2023最新)附论文下载

明天AAAI全文截稿了&#xff0c;不知道大家的论文投的咋样啦&#xff1f;我不得不提一句&#xff0c;今年的AAAI投稿量又破新高了&#xff0c;快14,000&#xff01;卷哭... 不过这个投稿量也在意料之中&#xff0c;AAAI属于中国计算机学会CCF的A类国际学术会议&#xff0c;在人…

Unity zSpace 开发

文章目录 1.下载 zSpace 开发环境1.1 zCore Unity Package1.2 zView Unity Package 2. 导入工程3. 发布设置4.功能实现4.1 用触控笔来实现对模型的拖拽&#xff1a; 5. 后续更新 1.下载 zSpace 开发环境 官网地址 1.1 zCore Unity Package zSpace 开发核心必须 1.2 zView …

Nacos使用SpringCloudAlibaba+Dubbo实现

Nacos简介 Nacos是阿里的一个开源产品&#xff0c;它是针对微服务架构中的服务发现、服务治理、配置管理的综合型解决方案。 官方介绍是这样的&#xff1a; Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您实现动态服务发现、…

【QT】 Word模板编辑、转PDF格式

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享基于QT进行Word模板编辑以及Word转PDF的技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 …

微信开发之一键退出群聊的技术实现

简要描述&#xff1a; 退出群聊 请求URL&#xff1a; http://域名地址/quitChatRoom 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wI…

微信小程序实现左滑删除

一、效果 二、代码 实现思路使用的是官方提供的 <movable-area> <movable-view> Page({/*** 页面的初始数据*/data: {pushedData:[{messageTitle:饼干,messageContent:饼干爱吃}],//已推送数据},/*** 生命周期函数--监听页面加载*/onLoad() {},/*** 生命周期函数-…