牛客網華為OD前端崗位,面試題庫練習記錄01

題目一 質數因子

功能:輸入一個正整數,按照從小到大的順序輸出它的所有質因子(重復的也要列舉)(如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 herewhile ((line = await readline())) {let n = linelet 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*5console.log("a=" + a);a /= 5;//等值:a =a/5console.log("a=" + a);a %= 5;//等值:a=a%5console.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 herewhile(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 herelet 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 herelet 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 herewhile(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 herewhile(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 herewhile(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 herelet 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 herewhile(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 herelet 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 herelet 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 herewhile ((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 herewhile ((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 herewhile ((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.pswp.cn/news/41936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IPv4分組

4.3.1 IPv4分組 IP協議定義數據傳送的基本單元——IP分組及其確切的數據格式 1. IPv4分組的格式 IPv4分組由首部和數據部分&#xff08;TCP、UDP段&#xff09;組成&#xff0c;其中首部分為固定部分&#xff08;20字節&#xff09;和可選字段&#xff08;長度可變&#xff0…

1AE4 的魔改混合放大電路

先上電路圖&#xff1a; 最新的1AE4的電路&#xff0c;目標依舊是極致的音效。 因此&#xff0c;為了將1AE4的潛力榨干&#xff0c;采用了一些完全不同的思路&#xff1a; 1&#xff09;原有的屏極接地&#xff0c;因為是一個殼子&#xff0c;所以能起到很好的屏蔽作用&#…

651頁23萬字智慧教育大數據信息化頂層設計及建設方案WORD

導讀&#xff1a;原文《651頁23萬字智慧教育大數據信息化頂層設計及建設方案WORD》&#xff08;獲取來源見文尾&#xff09;&#xff0c;本文精選其中精華及架構部分&#xff0c;邏輯清晰、內容完整&#xff0c;為快速形成售前方案提供參考。 目錄 一、 方案背景 1.1 以教育…

微信開發之一鍵獲取好友詳情的技術實現

簡要描述&#xff1a; 獲取聯系人信息 請求URL&#xff1a; http://域名地址/getContact 請求方式&#xff1a; POST 請求頭Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 參數&#xff1a; 參數名必選類型說…

LaWGPT基于中文法律知識的大語言模型_初步安裝

準備代碼&#xff0c;創建環境 # 下載代碼 git clone gitgithub.com:pengxiao-song/LaWGPT.git cd LaWGPT# 創建環境 conda create -n lawgpt python3.10 -y conda activate lawgpt國內網絡環境問題。你可以把requirements.txt里面的github.com替換成kgithub.com&#xff08;這…

go 協程并發數控制

錯誤的寫法&#xff1a; 這里的<-ch 是為了從channel 中讀取 數據&#xff0c;為了不使channel通道被寫滿&#xff0c;阻塞 go 協程數的創建。但是請注意&#xff0c;go workForDraw(v, &wg) 是不阻塞后續的<-ch 執行的&#xff0c;所以就一直go workForDraw(v, &…

使用 NLP 進行文本摘要

一、說明 文本摘要是為較長的文本文檔生成簡短、流暢且最重要的是準確摘要的過程。自動文本摘要背后的主要思想是能夠從整個集合中找到最重要信息的一小部分&#xff0c;并以人類可讀的格式呈現。隨著在線文本數據的增長&#xff0c;自動文本摘要方法可能會非常有用&#xff0c…

C語言好題解析(一)

目錄 選擇題1選擇題2選擇題3選擇題4編程題一 選擇題1 執行下面程序&#xff0c;正確的輸出是&#xff08; &#xff09;int x 5, y 7; void swap() {int z;z x;x y;y z; } int main() {int x 3, y 8;swap();printf("%d,%d\n",x, y);return 0; }A: 5,7 B: …

H5前端外包開發框架排名

以下是一些常見的網頁前端開發框架以及它們的排名和特點。請注意&#xff0c;隨著時間的推移&#xff0c;框架的排名和特點可能會有所變化。不同的項目和團隊對于框架的選擇會受到多個因素的影響&#xff0c;包括開發團隊的技能、項目的規模和要求、性能需求等。北京木奇移動技…

try-with-resource

git https://gitee.com/my739168148/auto-close-try-with-resource.git 限制 try-with-resource是java7版本引入的。 java版本說明 Autocloseable 只要是java.lang.Autocloseable接口的實現類&#xff0c;那么都可以使用try-with-resource來自動關閉資源。 使用 JDK1.8開…

【網絡】網絡層——IP協議

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;專欄&#xff1a;《網絡》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交給時間&#xff01; 網絡層中&#xff0c;IP協議首部和有效載荷組成的完整數據稱為數據報。 IP協議 &#x1f349;TCP和IP的…

C# Linq源碼分析之Take (二)

概要 本文主要分析Linq中Take帶Range參數的重載方法的源碼。 源碼分析 基于Range參數的Take重載方法&#xff0c;主要分成兩部分實現&#xff0c;一部分是Range中的開始和結束索引都是正數的情況例如取第一個到第三個元素的情況&#xff1b;另一部分是開始或結束索引中有倒數…

華為AI戰略的CANN

基于TVM的華為昇騰體系中—— 異構計算架構&#xff08;CANN&#xff09;是對標英偉達的CUDA CuDNN的核心軟件層&#xff0c;向上支持多種AI框架&#xff0c;向下服務AI處理器&#xff0c;發揮承上啟下的關鍵作用&#xff0c;是提升昇騰AI處理器計算效率的關鍵平臺 主要包括有…

ES安裝問題匯總

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 問題描述 ES啟動報錯。其原因是ES需要的的最小max file descriptors為65535&#xff0c;我們設置的是4096&#xff0c;需要增大max file descriptors的值。 解決方案 調大…

“new出對象“原理的深層解密

&#x1f388;個人主頁:&#x1f388; :???初階牛??? &#x1f43b;推薦專欄1: &#x1f354;&#x1f35f;&#x1f32f;C語言初階 &#x1f43b;推薦專欄2: &#x1f354;&#x1f35f;&#x1f32f;C語言進階 &#x1f511;個人信條: &#x1f335;知行合一 &#x1f…

正規的股票杠桿公司_杠桿公司排名(2023年版的)

本文將介紹一些正規的股票杠桿公司&#xff0c;并重點介紹配先查網站的特點&#xff0c;該網站是一家專業查詢實盤杠桿平臺的網站&#xff0c;提供相關信息和參考。 杠桿公司排名&#xff08;2023年版的&#xff09;&#xff1a;廣盛網、一鼎盈、尚紅網、盛多網、紅騰網、富燈…

Oracle/PL/SQL奇技淫巧之ROWNUM偽列

ROWNUM偽列 ROWNUM是一個偽列&#xff0c;它是根據每次查詢的結果動態生成的一列遞增編號&#xff0c;表示 Oracle 從表中選擇該行的順序&#xff0c;選擇的第一行ROWNUM為1&#xff0c;第二行ROWNUM為2&#xff0c;以此類推。 注意1&#xff1a; ROWNUM偽列是在WHERE子句之…

Mybatis——返回值(resultType&resultMap)詳解

之前的文章里面有對resultType和resultMap的簡單介紹這一期出點詳細的 resultType&#xff1a; 1&#xff0c;返回值為簡單類型。 直接使用resultType“類型”&#xff0c;如string&#xff0c;Integer等。 String getEmpNameById(Integer id); <!-- 指定 result…

Linux內核源碼剖析之TCP保活機制(KeepAlive)

寫在前面&#xff1a; 版本信息&#xff1a; Linux內核2.6.24&#xff08;大部分centos、ubuntu應該都在3.1。但是2.6的版本比較穩定&#xff0c;后續版本本質變化也不是很大&#xff09; ipv4 協議 https://blog.csdn.net/ComplexMaze/article/details/124201088 本文使用案例…

高級AI賦能Fortinet FortiXDR解決方案

擴展檢測和響應 (XDR&#xff1a;Extended Detection and Response) 解決方案旨在幫助組織整合分布式安全技術&#xff0c;更有效地識別和響應活動的威脅。雖然 XDR 是一種新的技術概念&#xff0c;但其構建基礎是端點檢測和響應 (EDR&#xff1a;Endpoint Detection and Respo…