中階班例題

數字排列IV

時間限制 2000 ms · 記憶體限制 256 MB · C++

給定 $N$ 個範圍介於 $0$ 到 $9$ 的數字,請列出這 $N$ 個數字所有可能的排列組合,也就是這 $N$ 個數字的全排列(permutations),並依照每一組排列中數字的順序由小到大排列所有結果,同一個數值應只出現一次。

輸入說明

先輸入一個數字 $N$ 並換行,代表此題有 $N$ 個數字,接著輸入 $N$ 個數字 $n_i$,數字間彼此以一個空格區分。

  • $ 1 \le N \le 8 $
  • $ 0 \le n_i \le 9 $

輸出說明

請你輸出這些數字的排列結果,每個排列輸出皆須換行,且數值應由小至大依序輸出,如有重複的數值應僅輸出一次,例如第二個範例測資

請注意:如果0為首,請去掉0,例如0157應輸出157,但單一個數字0應予以保留

範例測資二解釋:

$\{1,2,2\}$如果我們對於相同的數字編碼會像這樣$\{1,2_a,2_b\}$,而實際的組合有下面這幾種

  • $ 1,2_a,2_b $
  • $ 1,2_b,2_a $
  • $ 2_a,1,2_b $
  • $ 2_b,1,2_a $
  • $ 2_a,2_b,1 $
  • $ 2_b,2_a,1 $

但實際上在組合後,只有122、212、221這三個數字,所以輸出時應只能輸出這三個數字

範例

範例輸入 1

4
5 0 7 1

範例輸出 1

157
175
517
571
715
751
1057
1075
1507
1570
1705
1750
5017
5071
5107
5170
5701
5710
7015
7051
7105
7150
7501
7510

範例輸入 2

3
1 2 2

範例輸出 2

122
212
221

範例輸入 3

2
0 0

範例輸出 3

0

範例輸入 4

3
1 0 0

範例輸出 4

1
10
100
C++77 / 50,000

「跑範例測資」只跑題目敘述上的範例,會顯示你的輸出與正確答案的對照; 「提交評測」會跑完整的測資並給實際結果,但不會顯示測資內容。兩者都不需要帳號,也不會留下成績紀錄。