2017年校招全國(guó)統(tǒng)一模擬筆試(第三場(chǎng))編程題集合

地址:2017年校招全國(guó)統(tǒng)一模擬筆試(第三場(chǎng))編程題集合

變換次數(shù) (AC)

牛牛想對(duì)一個(gè)數(shù)做若干次變換,直到這個(gè)數(shù)只剩下一位數(shù)字。
變換的規(guī)則是:將這個(gè)數(shù)變成 所有位數(shù)上的數(shù)字的乘積。比如285經(jīng)過(guò)一次變換后轉(zhuǎn)化成285=80.
問(wèn)題是,要做多少次變換,使得這個(gè)數(shù)變成個(gè)位數(shù)。
輸入描述:
輸入一個(gè)整數(shù)。小于等于2,000,000,000。

輸出描述:
輸出一個(gè)整數(shù),表示變換次數(shù)。

輸入例子1:

285

輸出例子1:

2

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

rl.on('line', function(line) {
  var times = 0;
  var str = line.trim();
  calc(str);
  console.log(times);
  function calc(str){
    if(str.length === 1){
      return times;
    } else {
      times++;
      calc(str.split('').map(Number).reduce(function(a, b){
        return a * b;
      }, 1) + '');
    }
  }
});

神奇數(shù) (AC)

給出一個(gè)區(qū)間[a, b],計(jì)算區(qū)間內(nèi)“神奇數(shù)”的個(gè)數(shù)。
神奇數(shù)的定義:存在不同位置的兩個(gè)數(shù)位,組成一個(gè)兩位數(shù)(且不含前導(dǎo)0),且這個(gè)兩位數(shù)為質(zhì)數(shù)。
比如:153,可以使用數(shù)字3和數(shù)字1組成13,13是質(zhì)數(shù),滿足神奇數(shù)。同樣153可以找到31和53也為質(zhì)數(shù),只要找到一個(gè)質(zhì)數(shù)即滿足神奇數(shù)。
輸入描述:
輸入為兩個(gè)整數(shù)a和b,代表[a, b]區(qū)間 (1 ≤ a ≤ b ≤ 10000)。

輸出描述:
輸出為一個(gè)整數(shù),表示區(qū)間內(nèi)滿足條件的整數(shù)個(gè)數(shù)

輸入例子1:

11 20

輸出例子1:

6

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

rl.on('line', function(line) {
  var num = line.trim().split(' ').map(Number);
  var count = 0;
  for(var i = num[0]; i <= num[1]; i++){
    if(isMagicNum(i)){
      count++;
    }
  }
  console.log(count);

  function isMagicNum(num){
    arr = ('' + num).split('');
    var len = arr.length;
    for(var i = 0; i < arr.length; i++){
      for(var j = 0; j < arr.length; j++){
        if(i !== j && arr[j] !== '0' && arr[i] !== '0'){
          if(isPrime(parseInt(arr[i] + arr[j]))){
            return true;
          } else if(isPrime(parseInt(arr[j] + arr[i]))){
            return true;
          }
        }
      }
    }
    return false;
  }

  function isPrime(num){
    if((num & 1) === 0) return num === 2;
    var limit = Math.sqrt(num);
    for(var i = 3; i <= limit; i += 2){
      if(num % i === 0) return false;
    }
    return true;
  }

});

添加字符 (AC)

牛牛手里有一個(gè)字符串A,羊羊的手里有一個(gè)字符串B,B的長(zhǎng)度大于等于A,所以牛牛想把A串變得和B串一樣長(zhǎng),這樣羊羊就愿意和牛牛一起玩了。
而且A的長(zhǎng)度增加到和B串一樣長(zhǎng)的時(shí)候,對(duì)應(yīng)的每一位相等的越多,羊羊就越喜歡。比如"abc"和"abd"對(duì)應(yīng)相等的位數(shù)為2,為前兩位。
牛牛可以在A的開(kāi)頭或者結(jié)尾添加任意字符,使得長(zhǎng)度和B一樣。現(xiàn)在問(wèn)牛牛對(duì)A串添加完字符之后,不相等的位數(shù)最少有多少位?
輸入描述:
第一行為字符串A,第二行為字符串B,A的場(chǎng)地小于等于B的長(zhǎng)度,B的長(zhǎng)度小于等于50.字符均為小寫(xiě)字母。

輸出描述:
輸出一個(gè)整數(shù)表示A串添加完字符之后,不相等的位數(shù)最少有多少位?

輸入例子1:

abe
cabc

輸出例子1:

1

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var currLine = 0;
var strA, strB;
rl.on('line', function(line) {
  if(currLine === 0){
    strA = line.trim();
    currLine++;
  } else {
    strB = line.trim();
    if(strA.length === strB.length){
      console.log(getDiffLen(strA, strB));
    } else {
      console.log(strA.length - maxCommonSubStrLen(strA, strB))
    }
    currLine = 0, strA = strB = '';
  }

  function maxCommonSubStrLen(a, b){
    var maxLen = 0, len = 0;
    var lenA = a.length, lenB = b.length;
    var temp;
    for(var i = 0; i < lenB - lenA + 1; i++){
      temp = b.slice(i, i + lenA);
      len = getCommonLen(a, temp);
      maxLen = len < maxLen ? maxLen : len;
    }
    return maxLen;
  }
  function getDiffLen(a, b){
    if(a.length !== b.length) throw new Error('Two parameters in "getDiffLen" should be same length.');
    var arrA = a.split('');
    var arrB = b.split('');
    var num = 0;
    arrA.forEach(function(item, index){
      if(item !== arrB[index]){
        num++;
      }
    });
    return num;
  }
  function getCommonLen(a, b){
    if(a.length !== b.length) throw new Error('Two parameters in "getDiffLen" should be same length.');
    return a.length - getDiffLen(a, b);
  }
});

數(shù)組變換 (AC)

牛牛有一個(gè)數(shù)組,里面的數(shù)可能不相等,現(xiàn)在他想把數(shù)組變?yōu)椋核械臄?shù)都相等。問(wèn)是否可行。
牛牛可以進(jìn)行的操作是:將數(shù)組中的任意一個(gè)數(shù)改為這個(gè)數(shù)的兩倍。
這個(gè)操作的使用次數(shù)不限,也可以不使用,并且可以對(duì)同一個(gè)位置使用多次。

輸入描述:
輸入一個(gè)正整數(shù)N (N <= 50)
接下來(lái)一行輸入N個(gè)正整數(shù),每個(gè)數(shù)均小于等于1e9.

輸出描述:
假如經(jīng)過(guò)若干次操作可以使得N個(gè)數(shù)都相等,那么輸出"YES", 否則輸出"NO"

輸入例子1:

2
1 2

輸出例子1:

YES

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var currLine = 0;
var len, nums;
rl.on('line', function(line) {
  if(currLine === 0){
    len = parseInt(line);
    currLine++;
  } else {
    nums = line.trim().split(' ').map(Number);
    console.log(yesorno(nums));
    len = currLine = 0, nums = null;

    function yesorno(arr){
      var flag = null, temp;
      for(var i = 0; i < len; i++){
        temp = nums[i];
        while((temp & 1) === 0){
          temp /= 2;
        }
        if(flag){
          if(temp === flag) {
            continue;
          } else {
            return 'NO';
          }
        } else {
          flag = temp;
        }
      }
      return 'YES'
    }
  }
});

排序子序列 (AC)

牛牛定義排序子序列為一個(gè)數(shù)組中一段連續(xù)的子序列,并且這段子序列是非遞增或者非遞減排序的。牛牛有一個(gè)長(zhǎng)度為n的整數(shù)數(shù)組A,他現(xiàn)在有一個(gè)任務(wù)是把數(shù)組A分為若干段排序子序列,牛牛想知道他最少可以把這個(gè)數(shù)組分為幾段排序子序列.
如樣例所示,牛牛可以把數(shù)組A劃分為[1,2,3]和[2,2,1]兩個(gè)排序子序列,至少需要?jiǎng)澐譃?個(gè)排序子序列,所以輸出2

輸入描述:
輸入的第一行為一個(gè)正整數(shù)n(1 ≤ n ≤ 10^5)

第二行包括n個(gè)整數(shù)A_i(1 ≤ A_i ≤ 10^9),表示數(shù)組A的每個(gè)數(shù)字。

輸出描述:
輸出一個(gè)整數(shù)表示牛牛可以將A最少劃分為多少段排序子序列

輸入例子1:

6
1 2 3 2 2 1

輸出例子1:

2

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var currLine = 0;
var len, nums;
rl.on('line', function(line) {
  if(currLine === 0){
    len = parseInt(line);
    currLine++;
  } else {
    nums = line.trim().split(' ').map(Number);
    var count = 1;
    var isAsc = null;
    for(var i = 1, j = 0; i < len; i++){
      if(nums[i] < nums[i - 1]){
        if(isAsc === null) isAsc = true;
        else if(!isAsc) {
          count++;
          isAsc = null;
        }
      } else if(nums[i] > nums[i - 1]){
        if(isAsc === null) isAsc = false;
        else if(isAsc){
          count++;
          isAsc = null;
        }
      }
    }
    console.log(count);
    len = currLine = 0, nums = null;
  }
});

組隊(duì)競(jìng)賽 (Memory out)

牛牛舉辦了一次編程比賽,參加比賽的有3*n個(gè)選手,每個(gè)選手都有一個(gè)水平值a_i.現(xiàn)在要將這些選手進(jìn)行組隊(duì),一共組成n個(gè)隊(duì)伍,即每個(gè)隊(duì)伍3人.牛牛發(fā)現(xiàn)隊(duì)伍的水平值等于該隊(duì)伍隊(duì)員中第二高水平值。
例如:
一個(gè)隊(duì)伍三個(gè)隊(duì)員的水平值分別是3,3,3.那么隊(duì)伍的水平值是3
一個(gè)隊(duì)伍三個(gè)隊(duì)員的水平值分別是3,2,3.那么隊(duì)伍的水平值是3
一個(gè)隊(duì)伍三個(gè)隊(duì)員的水平值分別是1,5,2.那么隊(duì)伍的水平值是2
為了讓比賽更有看點(diǎn),牛牛想安排隊(duì)伍使所有隊(duì)伍的水平值總和最大。
如樣例所示:
如果牛牛把6個(gè)隊(duì)員劃分到兩個(gè)隊(duì)伍
如果方案為:
team1:{1,2,5}, team2:{5,5,8}, 這時(shí)候水平值總和為7.
而如果方案為:
team1:{2,5,8}, team2:{1,5,5}, 這時(shí)候水平值總和為10.
沒(méi)有比總和為10更大的方案,所以輸出10.

輸入描述:
輸入的第一行為一個(gè)正整數(shù)n(1 ≤ n ≤ 10^5)
第二行包括3*n個(gè)整數(shù)a_i(1 ≤ a_i ≤ 10^9),表示每個(gè)參賽選手的水平值.

輸出描述:
輸出一個(gè)整數(shù)表示所有隊(duì)伍的水平值總和最大值.

輸入例子1:

2
5 2 8 5 1 5

輸出例子1:

10

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var currLine = 0;
var group, nums;
rl.on('line', function(line) {
  if(currLine === 0){
    group = parseInt(line);
    currLine++;
  } else {
    nums = line.trim().split(' ').map(Number).sort(function(a, b){
      return b - a;
    });
    var len = nums.length;
    var ans = 0;
    for(var i = 1; i < len - group; i += 2){
      ans += nums[i];
    }
    console.log(ans);
    group = currLine = 0, nums = null;
  }
});

牛牛的數(shù)列 (AC)

牛牛現(xiàn)在有一個(gè)n個(gè)數(shù)組成的數(shù)列,牛牛現(xiàn)在想取一個(gè)連續(xù)的子序列,并且這個(gè)子序列還必須得滿足:最多只改變一個(gè)數(shù),就可以使得這個(gè)連續(xù)的子序列是一個(gè)嚴(yán)格上升的子序列,牛牛想知道這個(gè)連續(xù)子序列最長(zhǎng)的長(zhǎng)度是多少。
輸入描述:
輸入包括兩行,第一行包括一個(gè)整數(shù)n(1 ≤ n ≤ 10^5),即數(shù)列的長(zhǎng)度;
第二行n個(gè)整數(shù)a_i, 表示數(shù)列中的每個(gè)數(shù)(1 ≤ a_i ≤ 10^9),以空格分割。

輸出描述:
輸出一個(gè)整數(shù),表示最長(zhǎng)的長(zhǎng)度。

輸入例子1:

6
7 2 3 1 5 6

輸出例子1:

5

var readline = require('readline');
var quantity = 0, len = 0;
var max = 0, temp = 0, flag = 0;
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var currLine = 0;
var len, nums;
rl.on('line', function(line) {
  if(currLine === 0){
    len = parseInt(line);
    currLine++;
  } else {
    nums = line.trim().split(' ').map(Number);
    var ans = 1;
    var pre = [0], post = [0];

    nums.shift(Infinity);
    nums.push(Infinity);
    for(var i = 1; i <= len; i++){
      pre[i] = nums[i - 1] < nums[i] ? pre[i - 1] + 1 : 1;
    }
    for(var i = len; i > 0; i--){
      post[i] = nums[i] < nums[i + 1] ? post[i+1] + 1 : 1;
    }

    for (var i = 1; i <= len; i++){
      if (nums[i + 1] - nums[i - 1] >= 2) ans = Math.max(ans, pre[i - 1] + post[i + 1] + 1);
    }
    console.log(ans);
    len = currLine = 0, nums = null;
  }
});

訓(xùn)練部隊(duì) (AC)

小牛牛是牛牛王國(guó)的將軍,為了訓(xùn)練出精銳的部隊(duì),他會(huì)對(duì)新兵進(jìn)行訓(xùn)練。部隊(duì)進(jìn)入了n個(gè)新兵,每個(gè)新兵有一個(gè)戰(zhàn)斗力值和潛力值,當(dāng)兩個(gè)新兵進(jìn)行決斗時(shí),總是戰(zhàn)斗力值高的獲勝。獲勝的新兵的戰(zhàn)斗力值就會(huì)變成對(duì)手的潛力值 + 自己的戰(zhàn)斗力值 - 對(duì)手的戰(zhàn)斗力值。敗者將會(huì)被淘汰。若兩者戰(zhàn)斗力值一樣,則會(huì)同歸于盡,雙雙被淘汰(除了考察的那個(gè)新兵之外,其他新兵之間不會(huì)發(fā)生戰(zhàn)斗) 。小牛牛想知道通過(guò)互相決斗之后新兵中戰(zhàn)斗力值+潛力值最高的一個(gè)可能達(dá)到多少,你能幫助小牛牛將軍求出來(lái)嗎?

輸入描述:
輸入包括n+1行,第一行包括一個(gè)整數(shù)n(1 ≤ n ≤ 10^5);
接下來(lái)的n行,每行兩個(gè)整數(shù)x和y(1 ≤ x,y ≤ 10^9)

輸出描述:
輸出一個(gè)整數(shù),表示新兵中戰(zhàn)斗力值+潛力值最高的一個(gè)能達(dá)到多少。

示例輸入

2
1 2
2 1

示例輸出

4

var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
var quantity = 0, len = 0;
var sum = 0, temp = 0, flag = 0;
rl.on('line', function(line) {
  if(quantity === 0){
    quantity = len = parseInt(line);
  } else {
    var input = line.trim().split(' ').map(Number);
    if(input[0] >= input[1]){
      temp = input[0] + input[1];
      flag = flag > temp ? flag : temp;
    } else {
      temp = 2 * input[0];
      flag = flag > temp ? flag : temp;
      sum += input[1] - input[0];
    }
    quantity--;
    if(quantity === 0){
      console.log(sum + flag);
    }
  }
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,128評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,291評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,421評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,642評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,821評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,053評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容