2017年校招全國統一模擬筆試(第五場)程式設計題集合

weixin_33749242發表於2017-10-02
2076629-2da6fa72da6a386e.png

偶串 (AC)

如果一個字串由兩個相同字串連線而成,就稱這個字串是偶串。例如"xyzxyz"和"aaaaaa"是偶串,但是"ababab"和"xyzxy"卻不是。
牛牛現在給你一個只包含小寫字母的偶串s,你可以從字串s的末尾刪除1和或者多個字元,保證刪除之後的字串還是一個偶串,牛牛想知道刪除之後得到最長偶串長度是多少。

輸入描述:
輸入包括一個字串s,字串長度length(2 ≤ length ≤ 200),保證s是一個偶串且由小寫字母構成

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

輸入例子1:

abaababaab

輸出例子1:

6

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function(line) {
  var str = line.trim();
  str = strWithoutLast(str);
  while(str.length){
    if(str.length & 1 === 1){
      str = strWithoutLast(str);
    }
    if(isEvenStr(str)){
      console.log(str.length);
      break;
    } else {
      str = strWithoutLast(str);
    }
  }
  function isEvenStr(str){
    var len = str.length;
    var left = str.slice(0, len / 2);
    var right = str.slice(len / 2, len);
    return left === right;
  }
  function strWithoutLast(str){
    var len = str.length;
    return str.slice(0, len - 1);
  }
});

製造迴文 (AC)

牛牛有一些字母卡片,每張卡片上都有一個小寫字母,所有卡片組成一個字串s。牛牛一直認為迴文這種性質十分優雅,於是牛牛希望用這些卡片拼湊出一些迴文串,但是有以下要求:
1、每張卡片只能使用一次
2、要求構成的迴文串的數量最少
牛牛想知道用這些字母卡片,最少能拼湊出多少個迴文串。
例如: s = "abbaa",輸出1,因為最少可以拼湊出"ababa"這一個迴文串
s = "abc", 輸出3,因為最少只能拼湊出"a","b","c"這三個迴文串

輸入描述:
輸入包括一行,一個字串s,字串s長度length(1 ≤ length ≤ 1000).
s中每個字元都是小寫字母

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

輸入例子1:

abc

輸出例子1:

3

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function(line) {
  var alpha = 26;
  var strArr = line.trim().split('');
  var arr = [];
  var odd = 0;
  while(alpha){arr.push(0); alpha--;}
  for(var i = 0, len = strArr.length; i < len; i++){
    var index = strArr[i].charCodeAt(0) - 97;
    arr[index]++;
  }
  arr.forEach(function(item){
    if(item & 1 === 1){
      odd++;
    }
  });
  console.log(odd);
});

猜數 (Memory out)

牛牛和羊羊在玩一個有趣的猜數遊戲。在這個遊戲中,牛牛玩家選擇一個正整數,羊羊根據已給的提示猜這個數字。第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

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var mod = 1000000007;
  var ans = 1;
  var n = parseInt(line.trim());
  var vis = [];
  debugger;
  for(var i = 2; i <= n; i++){
    if(vis[i]) continue;
    for(var j = 2 * i; j <= n; j += i){
        vis[j] = 1;
    }
    var tmp = n;
    var cnt = 0;
    while(tmp >= i){
        tmp /= i;
        cnt++;
    }
    ans = ans * (cnt + 1) % mod;
  }
  console.log(ans);
});

DNA

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

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var str = line.trim();
  var len =  line.match(/[ATCG]*/g).reduce(function(a, b){
    return a < b.length ? b.length : a;
  }, 0);
  console.log(len);
});

彩色瓷磚

牛牛喜歡彩色的東西,尤其是彩色的瓷磚。牛牛的房間內鋪有L塊正方形瓷磚。每塊磚的顏色有四種可能:紅、綠、藍、黃。給定一個字串S, 如果S的第i個字元是'R', 'G', 'B'或'Y',那麼第i塊瓷磚的顏色就分別是紅、綠、藍或者黃。
牛牛決定換掉一些瓷磚的顏色,使得相鄰兩塊瓷磚的顏色均不相同。請幫牛牛計算他最少需要換掉的瓷磚數量。

輸入描述:
輸入包括一行,一個字串S,字串長度length(1 ≤ length ≤ 10),字串中每個字串都是'R', 'G', 'B'或者'Y'。

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

輸入例子1:

RRRRRR

輸出例子1:

3

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var str = line.trim();
  var arr = str.match(/([RGBY])\1+/g);
  var num = 0;
  if(arr){
    num = arr.reduce(function(a, b){
      return Math.floor(b.length / 2) + a;
    }, 0);
  }
  console.log(num);
});

相關文章