現在給你一副特製的撲克牌,總共有 2n 張牌,每張牌有一個編號,編號的範圍從 1 到 2n,而且任兩張牌的編號是不相同的。
考慮一副新的撲克牌,其編號從上到下剛好是由小到大排列,以下說明如何對這副牌做完美洗牌。首先將撲克牌由上到下平分成兩堆,第一次洗牌之前,會分成 {1, 2,…, n} 和 {n, n + 1 , …, 2n} 左右兩堆,一般洗牌是將撲克牌面朝下左右交錯的洗,之所以稱作為完美洗牌,代表他有以下的特性:
1. 同一堆的牌在洗完牌之後必定不會放在相鄰的位置,也就是洗牌每次都是左右各一張的交錯。
2. 每次洗牌的兩堆牌必定平分成等量的兩份。
3. 左手邊是撲克牌上面的 n 張,右手是剩下的 n 張。
4. 每次洗牌交錯時必定先從左邊開始。
根據這樣的規則,一副撲克牌在第一次洗牌之後的順序會變成:
{n + 1, 1, n + 2, 2, n + 3, 3, …, 2n - 1, n - 1, 2n, n}
請你寫一個程式去得到一副撲克牌經過完美洗牌 k (0 £ k £ 10,000,000) 次後,撲克牌的排列情況。
Hint: 作業的完美洗牌可以直接用k = k%52,但是這個數字和牌的張數一樣只是作業題湊巧而已。
第一行有一個正整數 T (T £ 30),代表接下來有幾筆測試資料。
接下來 T 行,每行都有兩個數字 n ( 1 £ n £ 500) 和 k (0 £ k £ 10,000,000),代表一副新的撲克牌經過 k 次的完美洗牌。
每筆測試資料各佔兩行。
每筆測試資料,第一行輸出 "Case C:" 表示第 C 筆測資,下一行輸出經過 k 次完美洗牌後由上到下的排列順序,相鄰兩個數字之間以一個空白隔開,第一個數字前面以及最後一個數字後面不可以有空白。