我申請的是前端開發崗位,筆試題估計軟件開發都是同樣的,直接三道大題,一開始不熟悉牛客網的編程環境,浪費了好多時間。前端
牛客網編程筆試有一個好處就是能夠在本地ide上面編寫運行以後再copy到答題環境中,這樣能夠方便我進行調試,更直觀地找到代碼中一些小問題並快速修改。面試
接下來就是乾貨分享啦!我筆試的時候作出了兩道題,第三題時間不夠,沒有作出來。不知道有沒有面試機會額。正則表達式
牛客網編程環境介紹編程
我選的是js v8數組
代碼示例有兩個app
1.ide
// 求a+b的和 while(line=readline()){ var lines = line.split(" "); var a = parseInt(lines[0]); var b = parseInt(lines[1]); print(a+b); }
2.spa
// 輸出一個整數,表示n階方陣的和 // 輸入 // 3 // 1 2 3 // 2 1 3 // 3 2 1 var n = parseInt(readline()); var ans = 0; for(var i = 0;i < n; i++){ lines = readline().split(" ") for(var j = 0;j < lines.length; j++){ ans += parseInt(lines[j]); } } print(ans);
筆試題:調試
第一題和第二題的代碼實現是在牛客網環境中運行的,若是本身調試的話能夠適當修改一下,不影響思路哈。code
1.題目很長,能夠簡化以下:
一個整數數組,數組中每一個值的範圍爲0-21,求數組中相鄰四個數之和最大,返回該相鄰四個數中的第一個數的索引
// 1.將輸入存爲一個數組;
//2.找數組中相鄰四個數之和最大,能夠考慮遍歷求和,將和放在一個新的數組中,其中對象的索引爲接收能量窗的索引,值爲四個數之和;
//3.遍歷數組,找出最大的值,並輸出對應的索引 var arr = []; var newarr = []; for(var i = 0;i < 21; i++){ arr[i] = parseInt(readline()); } for(var j = 0;j < arr.length-3; j++){ var h = 0; newarr[j] = 0; while(h<4){ newarr[j] += parseInt(arr[j+h]); h++; } } var max = Math.max.apply(null,newarr); var index = newarr.indexOf(max); print(index);
2.找標準鍵盤和天然鍵盤的對應關係,輸入是天然鍵盤,輸出是對應的標準鍵盤的字符,注意大寫字母對應輸出大寫字母,而小寫字母對應輸出小寫字母
標準鍵盤:QWERTYUIOPASDFGHJKLZXCVBNM
天然鍵盤:ABCDEFGHIJKLMNOPQRSTUVWXYZ
輸入
H kz k xif.
輸出
I am a boy.
//1.在天然鍵盤中找到對應字符的索引(用Indexof),再根據索引在標準鍵盤中找到對應字符;
//2.要考慮大小寫問題,可用正則表達式判斷字母大小寫 var bstr="QWERTYUIOPASDFGHJKLZXCVBNM"; var zstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var barr=bstr.split(""); var zarr=zstr.split(""); var newarr=[]; while(line=readline()){ var arr = line.split(""); } for(var j = 0;j < arr.length; j++){ var flag = true; //是否小寫 if(/^[a-z]+$/.test(arr[j])){ arr[j]=arr[j].toUpperCase(); flag = false; } var index = zarr.indexOf(arr[j]); if(index == -1){ newarr[j] = arr[j]; }else{ if(!flag){ newarr[j] = bstr[index].toLowerCase(); }else{ newarr[j] = bstr[index]; } } } var result = newarr.join(""); print(result);
3.
求一個整形數組中最大連續字數組的和
輸入
2, -3, 4, 11, -5, 8, 3, -6
輸出
21
輸入是一組數字,數字自己能夠是正數,也能夠是負數。輸出是這個數組的子數組中最大的求和數。如例子中知足該條件的額子數組是:4, 11, -5, 8, 3 求和後的值是21
// 1.要加和arr.length輪; // 2.聲明一個新數組,在每一輪加和中依次保存arr[i],arr[i]+arr[i+1],.....,arr[i]+...+arr[arr.length-1] // 3.找到新數組中最大的數值,輸出該值便可 // while(line=readline()){ // var arr = line.split(", "); // } var arr=[2,-3,4,11,-5,8,3,-6] var newarr=[]; var a=0; for(var i = 0;i < arr.length; i++){ // arr[i] = parseInt(arr[i]); var count = arr.length; while(count > i){ newarr[a] = 0; for(var j = i;j < count; j++){ newarr[a] += arr[j]; } count--; a++; } } var max = Math.max.apply(null,newarr); // print(max); console.log(max);