題目描述
給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。
我們假設對於小寫字母有『a』 <『b』 < … <『y』<『z』,而且給定的字串中的字母已經按照從小到大的順序排列。
輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。
輸出輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知s=s1,s2…sk,t=t1,t2…tk,則s解題思路:
求n個字母的所有排列,就是求在step個位置擺放n個各不相同的字母的所有方案。
函式permutation(int step)的作用是在第n個位置及其後位置(位置從0開始算)擺放合適的字母。這個任務可以分解成兩步:第一步是在第step個位置擺放乙個合適的(前面沒有用過的)字母;第二步是在第step+1個位置及其後位置擺放字母。第二步可以通過執行permutation(n+1);來實現。在第一步中,選好第step個位置擺放的字母後,要將其存在temp[step]裡。
#include
#include
char str[10]
;//輸入的字串
char temp[10]
;//求出的排列放在這裡
int n;
//字串的長度
int vis[10]
;//vis[i]表示第i個字母是否用過
void
permutation
(int step)
for(
int i=
0; i)//在第step個位置窮舉所有可能放法
if(vis[i]==0
)}intmain()
C語言 全排列
全排列問題 description 輸出自然數1到n所有不重複的排列,即n的全排列,要求所產生的任一數字序列中不允許出現重複的數字。input 包含多組測試資料,每組測試資料報含乙個正整數n 1 n 9 output 由1 n組成的所有不重複的數字序列,每行乙個序列。sample input 3sa...
全排列(c語言)
輸入乙個數字n,輸出1到n的所有排列方式。設定n 1個盒子 box 第1個盒子置於第1步,第2個盒子置於第2步.設定n張撲克牌 poker 上面分別記有數字1到n。假設求3張牌放入3個盒子的所有排列方式。初始人站在第1步,即第1個盒子面前。第1步 檢查所有牌,將1號牌發給1號盒子 走一步,到第2步。...
全排列演算法 C語言
includevoid swap int a,int x,int y void perm int a,int m,int n 全排列函式 if m n for int i 0 i思路,比如要求12345的全排列,那可以先求出以1開頭,2345剩下四個數的全排列,以此類推,求出2開頭,3開頭的,最後求...