牛客 程式設計題 洗牌C

2021-10-08 01:23:46 字數 1388 閱讀 9435

鏈結

洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。

現在需要洗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次之後從上往下的序列。

輸入描述:

第一行乙個數t

(t ≤ 100

),表示資料組數。對於每組資料,第一行兩個數n,k(

1 ≤ n,k ≤ 100

),接下來一行有2n個數a1,a2,..

.,a2n(

1 ≤ ai ≤ 1000000000

)。表示原始牌組從上到下的序列。

輸出描述:

對於每組資料,輸出一行,最終的序列。數字之間用空格隔開,不要在行末輸出多餘的空格。

先輸入列印一些t,n,k

num表示兩倍的n,定義table這個陣列,然後進行輸入

將table 賦值給v,這個v是最後要列印的陣列

while(k–)這個代表要洗牌k次

迴圈將右手給牌到table,然後是左手

最後反向給v

迴圈結束,列印資料

#include

#include

#include

#include

using

namespace std;

intmain()

// 將洗好的牌給反向v

for(

int i =

0; i < table.

size()

; i++

) v[i]

= table[table.

size()

-1- i];}

// 列印v

for(

int i =

0; i < v.

size()

-1; i++

) cout << v[i]

<<

" ";

cout << v[v.

size()

-1]<< endl;

}return0;

}

牛客網 洗牌問題

問題描述 洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張 上半堆 右手拿 著第n 1張到第2n張 下半堆 接著就開始洗牌的過程,先放下右手的最後一張牌,再放下左手的...

牛客 程式設計題 組隊競賽c

牛牛舉辦了一次程式設計比賽,參加比賽的有3 n個選手,每個選手都有乙個水平值a i.現在要將這些選手進行組隊,一共組成n個隊伍,即每個隊伍3人.牛牛發現隊伍的水平值等於該隊伍隊員中第二高水平值。例如 乙個隊伍三個隊員的水平值分別是3,3,3.那麼隊伍的水平值是3 乙個隊伍三個隊員的水平值分別是3,2...

牛客 程式設計題 元素查詢C

有乙個排過序的陣列,包含n個整數,但是這個陣列向左進行了一定長度的移位,例如,原陣列為 1,2,3,4,5,6 向左移位5個位置即變成了 6,1,2,3,4,5 現在對於移位後的陣列,需要查詢某個元素的位置。請設計乙個複雜度為log級別的演算法完成這個任務。給定乙個int陣列a,為移位後的陣列,同時...