網易2017提前提筆試編程題
1.彩色磚塊
小易有一些彩色的磚塊。每種顏色由一個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有一個給定的字符串s,s中每個字符代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麽這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。(如果兩種方式所對應的磚塊顏色序列是相同的,那麽認為這兩種方式是一樣的。)
例如: s = "ABAB",那麽小易有六種排列的結果:
"AABB","ABAB","ABBA","BAAB","BABA","BBAA"
其中只有"AABB"和"BBAA"滿足最多只有一對不同顏色的相鄰磚塊。
輸入描述
輸出描述:輸出一個整數,表示小易可以有多少種方式。
//題目出的很誤導人,其實意思就是判斷給出的字符串中有多少種不同種類的字符,超過兩種就是不合適的 while(line = readline()){ var arr = line.trim().split(‘‘); var subArr = []; for(var i=0; i<arr.length; i++){ if(subArr.indexOf(arr[i]) == -1){ subArr.push(arr[i]); } }if(subArr.length == 2){ console.log(2); }else if(subArr.length == 1){ console.log(1); }else{ console.log(0); } }
2. 01串的最長子串求取
如果一個01串任意兩個相鄰位置的字符都是不一樣的,我們就叫這個01串為交錯01串。例如: "1","10101","0101010"都是交錯01串。
小易現在有一個01串s,小易想找出一個最長的連續子串,並且這個子串是一個交錯01串。小易需要你幫幫忙求出最長的這樣的子串的長度是多少。
輸入描述:輸入包括字符串s,s的長度length(1 ≤ length ≤ 50),字符串中只包含‘0‘和‘1‘
輸出描述:輸出一個整數,表示最長的滿足要求的子串長度。
//直接遍歷整個字符串,記錄每次的長度,並取最大值 while(line = readline()){ var str = line.trim(); var len = str.length; if(len<=1){ console.log(len); }else{ var k=1; var max=1; for(var i=0; i<str.length-1; i++){ if(str[i] !== str[i+1]){ k++; }else{ k=1; } if(k > max){ max = k; } } console.log(max); } }
3. 獨立的小易
小易為了向他的父母表現他已經長大獨立了,他決定搬出去自己居住一段時間。一個人生活增加了許多花費: 小易每天必須吃一個水果並且需要每天支付x元的房屋租金。當前小易手中已經有f個水果和d元錢,小易也能去商店購買一些水果,商店每個水果售賣p元。小易為了表現他獨立生活的能力,希望能獨立生活的時間越長越好,小易希望你來幫他計算一下他最多能獨立生活多少天。
輸入描述:輸入包括一行,四個整數x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割
輸出描述:輸出一個整數, 表示小易最多能獨立生活多少天。
//註意分兩種情況 while(line = readline()){ var lines = line.trim().split(‘ ‘); var arr = lines.map(function(item){ return parseInt(item); }); var x = arr[0], f = arr[1], d = arr[2], p = arr[3]; if(Math.floor(d/x)<=f){ console.log(Math.floor(d/x)); }else{ console.log(Math.floor((d-f*x)/(x+p))+f); } }
網易2017提前提筆試編程題