C語言 全排列

2021-09-20 15:25:59 字數 880 閱讀 2612

題目描述

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。

我們假設對於小寫字母有『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開頭的,最後求...