題目連結:
題目大意:
給定一正整數 n (n ≦ 10 ^ 3),代表有一數列 a 的內容為1, 2, 3, ……, n 。
定義一種變換為 f(a, k) ,代表將 a 的數字每 k 個一組(剩下不足 k 個的也自成一組)。並將每組的第一個與後面的元素交換,交換到該組的最後一個位置。然後將此新數列作為新的數列 a 。
如 f(a, 3) 即為 a2, a3, a1;a5, a6, a4 ;……
試問,f(……f(f(a, 1), 2)……, n)為何?(即是求依序代入 k = 1 、 2 、……的變換,數列最後的樣子)
簡單的流程控制即可解決。
一開始設定 i = 0 、 j = k ,然後從 i 跑到 j - 1 的位置,一路上將第一個元素慢慢往後移。因此現在 i = k,然後將 j 加上 k 變成 2k 並重複以上步驟。直到 j 超過 n 。
最後一段不足 k 個的可以分別處理,或是也可以用一個判斷式將 j 固定在 n 的值以下。
然後依序代入 k = 1 、 2 、 3 、 …… 、 n ,最後數列的樣子即是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。