iT邦幫忙

0

c++ 解題

  • 分享至 

  • xImage

在今年的亞洲經濟發展研討會中,主辦國為了避免中共或台灣抗議,決定將所有參加國家的座位排為一直線。假設今年的參加國家有3個,用英文字母A, B, C來代表國家,則所有的排列組合依字典順序如下:
ABC
ACB
BAC
BCA
CAB
CBA

如果今年是第一屆,座位的排列就是A B C。假如是第四屆,排列就是B C A。假如是第七屆,就要再從頭循環,於是排列就又輪回A B C。可是主辦國發現,因為參加國家眾多,座位排列難以計算。給定參加國家的個數和今年年會的屆數,你的任務是找出座位的排列方式。

輸入說明:
輸入的資料中每一行表示一次會議,一行包含兩個數字。
第一個數字表示參加國家的個數
n(3≤n≤12)
,第二個數字表示這次年會的屆數
m(1≤m≤2000000000)

輸入資料的結尾是以一行0 0為結束(這一筆資料不必處理)。

輸出說明:
對於每一筆輸入資料,輸出一行排列的結果。國家代號如上例中,一律從A開始。請注意輸出座號排列的代號一律是大寫英文字母。

範例輸入:
3 4
3 12
5 120
12 12
0 0

範例輸出:
B C A
C B A
E D C B A
A B C D E F G H J L K I

淺水員 iT邦大師 6 級 ‧ 2022-05-04 16:17:09 檢舉
所以問題是什麼?
李大瑋 iT邦好手 1 級 ‧ 2022-05-04 16:40:35 檢舉
所以答案是什麼?
淺水員 iT邦大師 6 級 ‧ 2022-05-04 17:34:52 檢舉
我想知道提問者做了什麼,問題在哪邊?
就算沒程式碼也寫一下自己目前的想法吧
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-05-04 17:12:50

如果用遞迴的方式寫
第四個 case (12 12)會爆掉

不用遞迴的方式寫出結果如下
https://ithelp.ithome.com.tw/upload/images/20220504/20001787TJ0tM12ED9.png
https://ithelp.ithome.com.tw/upload/images/20220504/20001787LR9rzC3K5b.png

1
一級屠豬士
iT邦大師 1 級 ‧ 2022-05-04 21:06:06

用Python來做一下

from  itertools import *
letters = 'ABCDEFGHIJKL'

querylst = [[3,4], [3,12], [5,120], [12,12]]
for m,n in querylst:
  x = ''.join(list(islice(cycle(permutations(letters[0:m], m)),n))[n-1])
  print(f"{m} {n} -> {x}")

結果:

3 4 -> BCA
3 12 -> CBA
5 120 -> EDCBA
12 12 -> ABCDEFGHJLKI

permutations這個函式可用
有點像 c++ 的 qsort
只要知其然,不用知其所以然
/images/emoticon/emoticon75.gif

kone6666 iT邦新手 5 級 ‧ 2022-05-05 01:47:24 檢舉

一級屠豬士大大 厲害!!
最近正在學python還沒學到你這步
看不太懂 :((

我要發表回答

立即登入回答