問題描述
小易有乙個長度為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 表示學生的...