切換
舊版
前往
大廳
主題

ZeroJudge - a832: 2、數列變換 解題心得

Not In My Back Yard | 2019-06-02 18:33:12 | 巴幣 0 | 人氣 79

題目連結:


題目大意:
給定一正整數 n (n ≦ 10 ^ 3),代表有一數列 a 的內容為1, 2, 3, ……, n 。

定義一種變換為 f(a, k) ,代表將 a 的數字每 k 個一組(剩下不足 k 個的也自成一組)。並將每組的第一個與後面的元素交換,交換到該組的最後一個位置。然後將此新數列作為新的數列 a 。

如 f(a, 3) 即為 a, a, a;a, a, a ;……

試問,f(……f(f(a, 1), 2)……, n)為何?(即是求依序代入 k = 1 、 2 、……的變換,數列最後的樣子)



範例輸入:
4


範例輸出:
4 2 3 1


解題思維:
簡單的流程控制即可解決。

一開始設定 i = 0 、 j = k ,然後從 i 跑到 j - 1 的位置,一路上將第一個元素慢慢往後移。因此現在 i = k,然後將 j 加上 k 變成 2k 並重複以上步驟。直到 j 超過 n 。

最後一段不足 k 個的可以分別處理,或是也可以用一個判斷式將 j 固定在 n 的值以下。

然後依序代入 k = 1 、 2 、 3 、 …… 、 n ,最後數列的樣子即是所求。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作