2017校招全國統一模擬考試(第五場)JavaScript解法記錄(題目來源-->牛客網)

1.[編程題] 彩色瓷磚

時間限制:1秒
空間限制:32768K
牛牛喜歡彩色的東西,尤其是彩色的瓷磚。牛牛的房間內鋪有L塊正方形瓷磚。每塊磚的顏色有四種可能:紅、綠、藍、黃。給定一個字符串S, 如果S的第i個字符是’R’, ‘G’, ‘B’或’Y’,那麼第i塊瓷磚的顏色就分別是紅、綠、藍或者黃。
牛牛決定換掉一些瓷磚的顏色,使得相鄰兩塊瓷磚的顏色均不相同。請幫牛牛計算他最少需要換掉的瓷磚數量。
輸入描述:
輸入包括一行,一個字符串S,字符串長度length(1 ≤ length ≤ 10),字符串中每個字符串都是’R’, ‘G’, ‘B’或者’Y’。

輸出描述:
輸出一個整數,表示牛牛最少需要換掉的瓷磚數量

輸入例子1:
RRRRRR

輸出例子1:
3

解題思路:看似複雜的題,想清楚咋弄就容易了,也就是簡單的把相鄰的字符串替換掉一個保證相鄰字符串不同即可。
JavaScript解法:

function color(str){
    var count=0,arr=[];
    for(var i=1;i<str.length;i++){
        if(str[i]===str[i-1]){
            count++;
            arr=str.split("");
            arr.splice(i,1,"K");
            str=arr.join("");
        }       
    }
    console.log(count);
}
color(readline())

2.[編程題] DNA片段

時間限制:1秒
空間限制:32768K
牛牛從生物科研工作者那裏獲得一段字符串數據s,牛牛需要幫助科研工作者從中找出最長的DNA序列。DNA序列指的是序列中只包括’A’,’T’,’C’,’G’。牛牛覺得這個問題太簡單了,就把問題交給你來解決。
例如: s = “ABCBOATER”中包含最長的DNA片段是”AT”,所以最長的長度是2。
輸入描述:
輸入包括一個字符串s,字符串長度length(1 ≤ length ≤ 50),字符串中只包括大寫字母(‘A’~’Z’)。

輸出描述:
輸出一個整數,表示最長的DNA片段

輸入例子1:
ABCBOATER

輸出例子1:
2

解題思路:簡單的正則表達式應用,主要使用match方法
JavaScript解法:

function DNA(str){
    var length=0;
    var reg = /[ATGC]+/g;
    var dna = str.match(reg);
    for(var i=0;i<dna.length;i++){
        length=Math.max(length,dna[i].length)
    }
    console.log(length);
}
DNA(readline())

3.[編程題] 偶串

時間限制:1秒
空間限制:32768K
如果一個字符串由兩個相同字符串連接而成,就稱這個字符串是偶串。例如”xyzxyz”和”aaaaaa”是偶串,但是”ababab”和”xyzxy”卻不是。
牛牛現在給你一個只包含小寫字母的偶串s,你可以從字符串s的末尾刪除1和或者多個字符,保證刪除之後的字符串還是一個偶串,牛牛想知道刪除之後得到最長偶串長度是多少。
輸入描述:
輸入包括一個字符串s,字符串長度length(2 ≤ length ≤ 200),保證s是一個偶串且由小寫字母構成

輸出描述:
輸出一個整數,表示刪除之後能得到的最長偶串長度是多少。保證測試數據有非零解

輸入例子1:
abaababaab

輸出例子1:
6

解題思路:根據題目意思可以想到這是考遞歸的題,所以方法用來判斷是不是偶串即可,遞歸每次刪除最後一個字符,當是偶串時輸出長度。
JavaScript解法:

function even(str){
    if(str.length%2!==0){
        even(str.slice(0,str.length-1))
        return false
    }
    var str1=str.slice(0,str.length/2);
    var str2=str.slice(str.length/2,str.length);
    if(str1!==str2){
        even(str.slice(0,str.length-1))
        return false
    }
    console.log(str.length);
}
var st = readline();
even(st.slice(0,st.length-1))

4.[編程題] 製造迴文

時間限制:1秒
空間限制:32768K
牛牛有一些字母卡片,每張卡片上都有一個小寫字母,所有卡片組成一個字符串s。牛牛一直認爲迴文這種性質十分優雅,於是牛牛希望用這些卡片拼湊出一些迴文串,但是有以下要求:
1、每張卡片只能使用一次
2、要求構成的迴文串的數量最少
牛牛想知道用這些字母卡片,最少能拼湊出多少個迴文串。
例如: s = “abbaa”,輸出1,因爲最少可以拼湊出”ababa”這一個迴文串
s = “abc”, 輸出3,因爲最少只能拼湊出”a”,”b”,”c”這三個迴文串
輸入描述:
輸入包括一行,一個字符串s,字符串s長度length(1 ≤ length ≤ 1000).
s中每個字符都是小寫字母

輸出描述:
輸出一個整數,即最少的迴文串個數。

輸入例子1:
abc

輸出例子1:
3

解題思路:第一眼覺得可能是得先寫一個判斷迴文的函數多次調用,但想想覺得可行性太差,因此重新調整思路,重新讀題後研究出只要判斷出奇數數量的字母量即可。

function word(str){
    var arr = str.split("");
    var ob = {};
    var count = 0;
    for(var i=0;i<arr.length;i++){
        if(ob[arr[i]]){
            ob[arr[i]]++;
        }else{
            ob[arr[i]]=1;
        }
    }
    for(var key in ob){
        if(ob[key]%2===1){
            count++;            
        }
    }
    count = count?count:1;//調整默認最少數量
    console.log(count)
}
word(readline())

5.[編程題] 猜數遊戲

時間限制:1秒
空間限制:32768K
牛牛和羊羊在玩一個有趣的猜數遊戲。在這個遊戲中,牛牛玩家選擇一個正整數,羊羊根據已給的提示猜這個數字。第i個提示是”Y”或者”N”,表示牛牛選擇的數是否是i的倍數。
例如,如果提示是”YYNYY”,它表示這個數使1,2,4,5的倍數,但不是3的倍數。
注意到一些提示會出現錯誤。例如: 提示”NYYY”是錯誤的,因爲所有的整數都是1的倍數,所以起始元素肯定不會是”N”。此外,例如”YNNY”的提示也是錯誤的,因爲結果不可能是4的倍數但不是2的倍數。
現在給出一個整數n,表示已給的提示的長度。請計算出長度爲n的合法的提示的個數。
例如 n = 5:
合法的提示有:
YNNNN YNNNY YNYNN YNYNY YYNNN YYNNY
YYNYN YYNYY YYYNN YYYNY YYYYN YYYYY
所以輸出12
輸入描述:
輸入包括一個整數n(1 ≤ n ≤ 10^6),表示已給提示的長度。

輸出描述:
輸出一個整數,表示合法的提示個數。因爲答案可能會很大,所以輸出對於1000000007的模

輸入例子1:
5

輸出例子1:
12

em……這題又沒弄出來·····

發佈了36 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章