Re: [問題] 不定數窮舉方法
看板C_and_CPP (C/C++)作者boombastick (快樂很容易~)時間16年前 (2009/05/06 14:13)推噓2(2推 0噓 1→)留言3則, 2人參與討論串2/3 (看更多)
※ 引述《henry035 (Rex)》之銘言:
: 假設要窮舉 n 個字母的組合, n 是一個變數,
: 我原本想用迴圈,但由於 n 是個不定值,因此無法預知要用幾層迴圈,
: 想請問這類型的問題有什麼方法可解呢? 是不是有特定的演算法可使用呢?
: 我是有猜測是不是要用遞迴,但不太會用遞迴想方法(程式) ... @@|||
我手邊有類似的資料 給你參考看看
==============================
題目:給你 N 個數,請你列出這 N 個數的所有排列。
輸入輸出說明:先輸入一個正整數 N,代表後面有 N 個整數,請你以每一種排列一行的
方式將所有排列都印出來。
輸入1:3 1 2 3
輸出1:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
輸入2:4 1 3 5 7
輸出2:
1 3 5 7
1 3 7 5
1 5 3 7
1 5 7 3
1 7 3 5
1 7 5 3
3 1 5 7
3 1 7 5
3 5 1 7
3 5 7 1
3 7 1 5
3 7 5 1
5 1 3 7
5 1 7 3
5 3 1 7
5 3 7 1
5 7 1 3
5 7 3 1
7 1 3 5
7 1 5 3
7 3 1 5
7 3 5 1
7 5 1 3
7 5 3 1
參考程式:(不考慮重覆數字的情況)
#include <cstdlib>
#include <iostream>
#define MAX 30
using namespace std;
int s[MAX], v[MAX], r[MAX], n;
void Permutation(int index)
{
int i;
if ( index==n )
{
for (i=0; i<n; i++)
cout << s[r[i]] << " ";
cout << endl;
return;
}
for (i=0; i<n; i++)
{
if ( v[i] ) continue;
v[i]=1;
r[index]=i;
Permutation(index+1);
v[i]=0;
}
}
int main(int argc, char *argv[])
{
int i;
while (1)
{
cin >> n;
if ( n==0 ) break;
for (i=0; i<n; i++)
{
cin >> s[i];
v[i]=0;
}
Permutation(0);
}
system("PAUSE");
return EXIT_SUCCESS;
}
--
◢████◣ 其實,我平常就像其他女孩子一樣,靜靜的,很溫柔……
★▃ ★▃ ╯
~●────●~
◢██████◣
██████
◥ ◤ ψRikakoWoods
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.244.54.130
推
05/06 16:27, , 1F
05/06 16:27, 1F
→
05/06 16:27, , 2F
05/06 16:27, 2F
推
05/06 17:15, , 3F
05/06 17:15, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章