鏈結
洗牌在生活中十分常見,現在需要寫乙個程式模擬洗牌的過程。現在需要洗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,n,k輸入描述:
第一行乙個數t
(t ≤ 100
),表示資料組數。對於每組資料,第一行兩個數n,k(
1 ≤ n,k ≤ 100
),接下來一行有2n個數a1,a2,..
.,a2n(
1 ≤ ai ≤ 1000000000
)。表示原始牌組從上到下的序列。
輸出描述:
對於每組資料,輸出一行,最終的序列。數字之間用空格隔開,不要在行末輸出多餘的空格。
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,為移位後的陣列,同時...