筆試題 網易2018秋招內推筆試

2021-08-22 14:50:35 字數 4287 閱讀 4552

問題描述

小易有乙個長度為n的整數序列,a_1,…,a_n。然後考慮在乙個空序列b上進行n次以下操作:

1、將a_i放入b序列的末尾

2、逆置b序列

小易需要你計算輸出操作n次之後的b序列。

輸入描述

輸入包括兩行,第一行包括乙個整數n(2 ≤ n ≤ 2*10^5),即序列的長度。

第二行包括n個整數a_i(1 ≤ a_i ≤ 10^9),即序列a中的每個整數,以空格分割。

輸出描述

在一行中輸出操作n次之後的b序列,以空格分割,行末無空格。

注意:要看一下輸入輸出描述,確定一下,不按要求的話,oj通不過

例子有兩種:

個數為奇數:3 (1,2,3) 

1,翻轉 1,

1,2翻轉 2,1

2,1,3翻轉 3,1,2

最後的結果是 3,1,2

個數為偶數時,4(1,2,3,4)

3,1,2,4翻轉後 4,2,1,3

這些有點像高中找規律的題目,先來看看個簡短的例項就知道了:

輸入:51

2345

輸出的轉變過程:1-

-->112

--->212

13--

-> 312

3124

---> 421

3421

35--

-> 531

24

可以發現,當輸入奇數個的時候,把奇數放左邊,偶數放右邊。當輸入個數時偶數個的時候,把偶數放左邊,奇數放右邊。其實就是先從尾部跳躍取數,到取到頭部時在從第二個數開始跳躍取數至倒數第二個。當然需要考慮一些特殊情況,比如只有乙個輸入的時候。

我的**如下,因為這是去年的題目,我也沒有辦法驗證其準確率;只能說在本機上通過了我自定義的例子。

先輸入n值,然後輸入陣列乙個個push進vector中;

#include

#include

using

namespace

std;

int main()

int j = n-1;

while (j>=0)

if (n > 1)

}for (int k = 0; k < n;k++)

cin.get();

cin.get();

}

問題描述

小易現在手裡有f個水果和d元,一天要消耗x元房租和1個水果,商店售賣乙個水果p元,請問小易能堅持幾天。

先看f個蘋果和d元付房租x能成多少天day_max,如果day_max<=f;這就說明最多只能活day_max天了。如果day_max>f,這就說明可能還有餘錢來買蘋果來增加天數,那試著買乙個蘋果,如果買了乙個蘋果後,天數day還是大於等於原來的蘋果數的話,那麼我們更新最大天數day_max和蘋果數ori_f,之後繼續返回前面的邏輯;但如果時天價蘋果,或者買了個蘋果後發現天數day反而比原來的ori_f小(就是說原來可以活ori_f天的,現在買了個天價蘋果,反而加速死亡了),那我們還是選擇不買了,就是最後乙個else處,直接輸出ori_f作為最大天數。

#include

using

namespace

std;

int main()

else

if (day >= ori_f)

else

}cin.get();

cin.get();

}

問題描述

瘋狂佇列,就是給乙個數字,要求他們得兩兩的差值和最大,求這個瘋狂值,即:差值。

輸入描述

輸入包括兩行,第一行乙個整數n(1 ≤ n ≤ 50),表示學生的人數 

第二行為n個整數h[i](1 ≤ h[i] ≤ 1000),表示每個學生的身高

輸出描述

如樣例所示: 

55 10 25 40 35

當佇列排列順序是: 35-10-40-5-25, 身高差絕對值的總和為25+30+35+20=110。

其實25-10-40-5-35這樣的排序與上面結果一樣,因為都是兩邊內部兩個數的和與外部和的差絕對值。

這是最大的瘋狂值了

根據樣例提示,猜想了乙個結論:

我們要把這個佇列安排為交錯的形式(證明略)。

交錯有兩種形式,看第乙個人是比他相鄰的人高還是矮。

以矮的為例:

總共的瘋狂值為(h2 - h1) + (h2 - h3) + (h4 - h3) + … = -h1 + 2h2 - 2h3 + 2h4 - …,

如果總共是偶數個人,瘋狂值為-h1 + 2h2 - 2h3 + 2h4 - … - 2h + h,所以我們需要從最大的開始依次安排h2,…h,然後安排h,然後繼續安排剩下的。

如果總共是奇數個人,瘋狂值為-h1 + 2h2 - 2h3 + 2h4 - … + 2h - h,所以我們需要從最大的開始依次安排h2,…h,然後安排h1和h,然後繼續安排剩下的。

然後另外一種形式類似,維護最大的瘋狂值即可

#include 

#include

using

namespace

std;

int h[55];

int n;

int main()

ans += h[tmp - 1] - h[tmp];

cout

<< ans << endl;

return

0; }

else

ans1 += -h[tmp] + h[tmp - 1];

ans2 += h[n] - h[n + 1];

cout

<< max(ans1, ans2) << endl;

return

0; }

return

0;}

問題描述

判斷數列能否是等差數列,

分析:先排序,然後再比較差值。

先用快速排序將原始陣列從小到大排序,再比較差值是否相等。

快速排序詳情:點這裡

#include 

#include

#include

void quicksort(int lo, int hi);

int pivotsort(int lo, int hi);

using

namespace

std;

vector

resv1;

int main()

int n = resv1.size();

if (n < 3)

quicksort(0, n - 1);

for (int k = 1; k < n-1;k++)

}cout

<< "是"

<< endl;

cin.get();

cin.get();

return0;}

void quicksort(int lo,int hi)

int mid = pivotsort(lo,hi);

quicksort(lo, mid);

quicksort(mid + 1, hi);

}int pivotsort(int lo,int hi)

resv1[lo] = resv1[hi];

while ((loreturn lo;

}

s = 「abab」,那麼小易有六種排列的結果:

「aabb」,」abab」,」abba」,」baab」,」baba」,」bbaa」

其中只有」aabb」和」bbaa」滿足最多只有一對不同顏色的相鄰磚塊。

輸出只有一對不同顏色的相鄰磚塊組合;若本身有大於2種磚塊顏色,那麼不可能存在。這題目我也是看別人轉的,不清楚具體要輸出什麼,哈哈哈。

#include 

#include

//#include

#include

#include

#include

using

namespace

std;

int main();

for (int i = 0; i < n;i++)

if (mapstr.size() > 2)

if (mapstr.size()==1) ;

if (mapstr.size()==2) ;

}

2018網易秋招內推筆試題 彩色的磚塊

題目 小易有一些彩色的磚塊。每種顏色由乙個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有乙個給定的字串s,s中每個字元代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。如果兩...

網易2018秋招筆試題之合唱

小q和牛博士合唱一首歌曲,這首歌曲由n個音調組成,每個音調由乙個正整數表示。對於每個音調要麼由小q演唱要麼由牛博士演唱,對於一系列音調演唱的難度等於所有相鄰音調製化幅度之和,例如乙個音調序列是8,8,13,12,那麼它的難度等於 8 8 13 8 12 13 6 其中 表示絕對值 現在要對把這n個音...

網易2017內推筆試題

有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?輸入描述 每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生的...