天天看點

2019年初考核題

初衷:

本篇是繼昨天我們部門(技術部)的年初能力考核後,整理出來的文章。以此鞭策自己在今年的工作上,樹立清晰可見的目标,已達到最終預期的效果。

題目:

1.有一個沙灘,有無窮多的沙子。現有2個空容器,分别可裝為5kg和6kg的沙子。問題是如何隻用這2個容器取得3kg的沙子?(10分)

2019年初考核題

2.燒一根不均勻的繩從頭燒到尾總共需要1個小時,如何用它來判斷半個小時?

現在有3條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?(10分)

2019年初考核題

3.你有四個裝藥丸的藥罐,其中有一個藥罐的藥丸被污染,每個正常的藥丸都有一定的重量,被污染的藥丸是沒被污染的重量+1,隻稱量一次,如何判斷哪個藥罐的藥被污染了? (10分)

給四個罐子編上号,1、2、3、4.然後1号拿一個,2号拿2個,3号拿3個,4号拿4個,稱一下,若是都沒被污染,應該重10個重量,若是11個重量就是1号罐,12就是2号罐,13就是3号罐,14就是4号罐(此題不太嚴謹,取相對重量)

4.實作一個算法,确定一個英文字元字元串的所有字元是否全都不同。

給定一個string iniString,字元串的長度小于等于100,請傳回一個bool值,True代表所有字元全都不同,False代表存在相同的字元。(20分)

測試樣例:

“aeiou”

傳回:True

“BarackObama”

傳回:False

思路:把那個字元串全部取出來放進一個數組中,然後對那個數組去重得到一個新數組,前後兩個數組長度一對比,如果一樣,就沒重複,傳回true;如果不一樣,就傳回false。
function test(str){
    var arr=[];//把字元串中所有元素
    for(var i=0;i<str.length;i++){
        arr.push(str[i]);
    };
    //  arr = str.split("").join("");  //這個是經過同僚指點,将上一步循環換成更加完美的轉成數組的方式
    var newArr = Array.from(new Set(arr));
    if(arr.length == newArr.length){
        return true;
    }else{
         return false;
    }
}
test("aeiou");//true;
test("BarackObama");//false;
           

5.實作一個算法,翻轉一個給定的字元串。

給定一個string iniString,符串的長度小于等于100,請傳回一個string,為翻轉後的字元串。 (20分)

測試樣例:

"This is nowcoder"          傳回:"redocwon si sihT"
           
var str = "This is nowcoder"; 
console.log( str.split("").reverse().join("") );//redocwon si sihT
           

劃重點對自己的英語水準,一直很自信,沒成想最後居然把reverse寫成deverse了,最有把握的一道題也涼涼了……

6.利用字元重複出現的次數,編寫一個方法,實作基本的字元串壓縮功能。比如,字元串“aabcccccaaa”經壓縮會變成“a2b1c5a3”。若壓縮後的字元串沒有變短,則傳回原先的字元串。

給定一個string iniString為待壓縮的串(長度小于等于100),保證串内字元均由大小寫英文字母組成,傳回一個string,為所求的壓縮後或未變化的字元串。(30)

測試樣例

"aabcccccaaa"              傳回:"a2b1c5a3"
"welcometonowcoderrrrr"    傳回:"welcometonowcoderrrrr"
           
//取出字元串,判斷重複停止,添加到新字元串中
function solution(str) {
  if(typeof str !== "string"){//類型不為字元串傳回空
    return '';
  }
  if (str.length <= 1){//直接傳回源字元串
    return str; 
  }
  let newStr = '';
  let s = str.charAt(0);
  let num = 1; //跳過第一個
  let total = str.length;
  for (let i = 1; i < total; i++) {
    let nowS = str.charAt(i);
    if (nowS === s) {
      num = num + 1; // 增加數量
      if (i + 1 === total) {
        newStr += `${s}${num}`; // 周遊結束時,拼接最後的字元串
      }
    } else {
      newStr += `${s}${num}`; // 拼接字元串
      num = 1; // 重置為1
      s = nowS; // 轉為下一個字元s
    }
  }
  if (newStr.length >= str.length) {// 生成的字元串長度大于等于源字元串 傳回源字元串 否則傳回生成的字元串
    return str;
  } else {
    return newStr;
  }
};

console.log(
  '輸出:',
  solution('welcometonowcoderrrrr'), 
  solution('aabcccccaaa'),
);//輸出: welcometonowcoderrrrr a2b1c5a3
           

結語:

韓老師點評到:類似于前三道的題目,在考公務員、智力競賽這些方面都可以見到,平時也可以多了解了解,對開發智力也頗有幫助;後面三道,其實自己做過很多遍,也許因為各種不确定因素,總是展現出了不完美的一面。再接再厲!

轉載于:https://www.cnblogs.com/zhengyeye/p/10400097.html