華爲2018屆校招技術崗筆試題及我的解答

前言

昨天(9.13)參加了華爲2018屆的技術崗筆試,特此總結一下筆試的題目和我我的的解答思路。
筆試題一共是三道編程題,大體是數值反向輸出,比較和排序,相對較基礎。
PS:因爲沒有截圖,因此題目是根據我本身的記憶複述的,各位見諒(¯﹃¯)
博文地址:華爲2018屆校招技術崗筆試題及我的解答git

第一題

題目:es6

輸入一個整數(含負數),輸出3個數據,以下:
1.輸出該整數的位數;
2.將該整數各位拆分輸出,中間以空格隔開(注意末位不能有空格)。若是是負數,則符號與第一個數一塊兒輸出;
3.輸出該數的反轉數,如爲負數,符號位置不變,置於最前。

示例
輸入:github

-12345

輸出:編程

5
-1 2 3 4 5
-54321

個人代碼以下(JavaScript-Node):bash

/*** Node輸入輸出模塊 相似Java的Scanner ***/
var readline = require("readline");
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

/* rl.on("line",function(data)) 監聽輸入,data爲每次輸入的的一行數據,每輸入新行便觸發一次function(data) */
rl.on("line", function (data) {
  var num_space;
  var num_reverse;
  if (data[0] == "-") {
    num_space = "-" + data.slice(1).split("").join(" "); /** 2.含空格整數 **/
    num_reverse = "-" + data.slice(1).split("").reverse().join(""); /** 3.反轉整數 **/
    console.log((data.length - 1) + "\n" + num_space + "\n" + num_reverse);
  } else {
    num_space = data.split("").join(" "); /** 2.含空格整數 **/
    num_reverse = data.split("").reverse().join(""); /** 3.反轉整數 **/
    console.log(data.length + "\n" + num_space + "\n" + num_reverse);
  }
});

第二題

題目:函數

輸入4個IP值組成兩個IP段:
第1、二行分別爲第一個IP段的起始和結尾IP,第3、四行爲第二個IP段的起始和結尾。
要求輸出:
若兩個IP段有交集則輸出"Overlap IP",沒有則輸出"No Overlap IP"。

示例
輸入:ui

1.1.1.1
255.255.255.255
2.2.2.2
3.3.3.3

輸出:spa

Overlap IP

個人代碼以下(JavaScript-Node):code

/*** Node輸入輸出模塊 相似Java的Scanner ***/
var readline = require("readline");
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

/*** rl.on("line",function(ip)) 監聽輸入,ip爲每次輸入的一行數據,每輸入新行便觸發一次function(ip) ***/
var ips = new Array(0);//存儲4個IP值
rl.on("line", function (ip) {
  /* IP值處理,轉爲易比較方式 */
  if (ips.length < 4) {   /** 存儲的IP數小於4個則繼續處理並存儲 **/
    ips[ips.length] = ip.split(".").map(function (x) { //坑爹,筆試環境不支持es6,不能用箭頭函數 
      if (3 - x.length) {
        x = (3 - x.length > 1 ? "00" : "0") + x;
      }
      return x;
    }).join("");//join("")沒必要需,比較時自動toString(),雖然各項之間有逗號但不影響比較結果
  }
  /** 4個IP均已得到,開始比較 **/
  if (ips.length == 4) {
    if (ips[2] > ips[1] || ips[3] < ips[0])
      console.log("No Overlap IP");
    else
      console.log("Overlap IP");
    ips = [];//清空ips,爲下次輸入作準備
  }
});

第三題

題目:排序

輸入兩行數據,第一行包含多個正整數,以空格分開,根據每一個數的後三位大小進行排序;第二行爲數值n,輸出排序後指定位置n的數。
要求:
1.若數不足三位,則直接比較;
2.若兩數比較結果相等,則兩數相對位置不變。
要求輸出:
排序後第n個數(位置從1開始)。

示例
輸入:

12 450 9001 5231 8231 7231
5

輸出:

7231

個人代碼以下(JavaScript-Node):

/*** Node輸入輸出模塊 相似Java的Scanner ***/
var readline = require("readline");
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

/* rl.on("line",function(data)) 監聽輸入,data爲每次輸入的一行數據,每輸入新行便觸發一次function(data) */
var nums = new Array(0);
rl.on("line", function (data) {
  if (!nums.length) {
    nums = data.split(" ").sort(function (x1, x2) {
      if (x1.length > 2)
        x1 = x1.slice(-3); //截取從倒數第三位到結尾的字符串
      if (x2.length > 2)
        x2 = x2.slice(-3);
      return x1 - x2;  //返回負數則x1排在x2前面
    });
  }
  else {
    console.log(nums[data - 1]);
    nums = []; //清空nums
  }
});

總結

華爲的筆試編程題整體來講比較基礎(或者我分到的題目比較簡單?哈哈),主要是排序、比較類的題目。看來華爲仍是很給咱們面子的哈哈<( ̄︶ ̄)>
另外,我用的是 JavaScript ,由於題目比較簡單,好理解,全部沒有太多註釋,其餘語言的同窗歡迎參考,語言都是相通的。

另外你們以爲不錯的話,但願能點個贊,謝謝!

相關文章
相關標籤/搜索