洗牌演算法 網易 注 不要在行末輸出多餘的空格

2021-07-23 00:00:37 字數 532 閱讀 8580

洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。 現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張(上半堆),右手拿著第n+1張到第2n張(下半堆)。接著就開始洗牌的過程,先放下右手的最後一張牌,再放下左手的最後一張牌,接著放下右手的倒數第二張牌,再放下左手的倒數第二張牌,直到最後放下左手的第一張牌。接著把牌合併起來就可以了。 例如有6張牌,最開始牌的序列是1,2,3,4,5,6。首先分成兩組,左手拿著1,2,3;右手拿著4,5,6。在洗牌過程中按順序放下了6,3,5,2,4,1。把這六張牌再次合成一組牌之後,我們按照從上往下的順序看這組牌,就變成了序列1,4,2,5,3,6。 現在給出乙個原始牌組,請輸出這副牌洗牌k次之後從上往下的序列。 

#include #include #include using namespace std;

int main()

a = vec;

}for (int i = 0; i <2*n-1; i++)

cout << a[2 * n - 1]<

演算法 網易內推等差數列

如果乙個數列s滿足對於所有的合法的i,都有s i 1 s i d,這裡的d也可以是負數和零,我們就稱數列s為等差數列。小易現在有乙個長度為n的數列x,小易想把x變為乙個等差數列。小易允許在數列上做交換任意兩個位置的數值的操作,並且交換操作允許交換多次。但是有些數列通過交換還是不能變成等差數列,小易需...

演算法 網易筆試 台階石板約數問題(回退)

題意 輸入兩個引數start 和 end start每次只能走自己的約數 除去1和本身 走到新位置時也是一樣的規則。求從start到end最少需要的step?如輸入4 和 24,需要5步 為4 6 8 12 18 24.include includeusing namespace std stati...

九章演算法 網易面試題 逆序對

描述 在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。給你乙個陣列,求出這個陣列中逆序對的總數。概括 如果a i a j 且 i j,a i 和 a j 構成乙個逆序對。lintcode 領扣 樣例1 輸入 a 2,4,1,3,5 輸出 3 解釋 2,1 4,1 4,3...