應屆生前端開發筆試題目
如今的很多網際網路公司,尤其是一些大公司總喜歡出各種演算法題,考察程式設計師的邏輯思維能力。這是本人蔘加應聘時做過的面試題目,還有一些是網上收集的在面試時出現率比較高的演算法題,現在拿出來跟大家一起分享,希望對一些前端開發應聘者能帶來一些幫助,面試時即使做的題目跟這些不一樣,但是這些做題的思想都是通用的。
題目1:
這是一個9*9的乘法口訣表,是完全用演算法生成的,下來請用javascript完成生成一個這樣的乘法口訣表,要求和圖片一模一樣,注意邊框,注意字型,注意一切細節,不允許使用table。
說明:使用document.write()建立HTML標籤並新增class;通過遞迴方法成一個9*9乘法表;再使用css給乘法表新增樣式,使其變成等腰三角形。(關於邊框重疊的問題,可以通過設定margin為負值來消除)
JavaScript程式碼:
document.write("<div class='box'>");//最外層div
for (var i=1; i<=9; i++) {//行
document.write("<div>");
for (var j=1; j<=i; j++) { //列
document.write("<span class='column'>"+ i + "×" + j + "=" + i*j + "</span>");
}
document.write("</div>");
}
document.write("</div>");
CSS程式碼:
.box {
text-align: center;
}
.column {
display: inline-block;
width: 51px;
height: 17px;
font-size: 12px;
border: 1px solid #E2E2E2;
margin-right: -1px;
margin-bottom: -1px;
padding: 5px 10px;
}
題目2:
通過一個輸入框,輸入一個自定義的陣列,例如1,4,5,23,2,17,24,10000000。請把他按照中間高兩邊低進行排序,最後的結果是1,4,5,23,10000000,24,17,2,演算法越準確越好,請注意左右翼資料資料的平衡性。
分析:應該分情況處理。1、如果陣列的長度為偶數,則直接分為兩組,第一組從小到大排序,第二組從大到小排序,兩組拼接輸出。 2、如果數值的長度為奇數,取出最大那個數,剩下的偶位數陣列進行1操作,然後得到的兩個陣列跟最大那個數拼接輸出。
JavaScript程式碼:
var cont = prompt("請輸入一個數組,並用英文逗號隔開");
var arr = cont.split(",");
var arr1=[];
var arr2=[];
var max =Math.max.apply(null, arr);
if (arr.length%2==0) { //偶數
arrSplit(arr,arr1,arr2);//呼叫排序函式
document.write(arr1.concat(arr2)); //拼接arr1和arr2陣列
}
else{//奇數
arr.sort(function(a, b){//對陣列進行排序
return b-a;
});
var newArr = arr.slice(1); //除掉最大一個的數,得到偶位數的陣列
arrSplit(newArr,arr1,arr2)
arr2.unshift(max);//把最大那個數插入arr2
document.write(arr1.concat(arr2));
}function arrSplit(arr,arr1,arr2){//封裝一個對偶數位陣列進行分割和排序的函式
var Array = [];//定義一個數組用於存放arr1和arr2的返回值
for (var i=0; i<arr.length/2; i++) { //拆分成兩個陣列
arr1[i]= arr[i];
arr2[i]= arr[i+arr.length/2];
}
arr1.sort(function (a, b){ //升序
return a-b;
});
arr2.sort(function (c, d){ //降序
return d-c;
});
Array[0]=arr1;
Array[1]=arr2;
return Array; //返回arr1和arr2陣列
}