日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打印字符串(C语言,全排列)

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打印字符串(C语言,全排列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題:輸入一個小于26的數字n, 代表從字母a開始的一串長度為n的連續字符,如4表示abcd。 請輸出這串字符的所有可能排列。

根據提示,補充一個函數int print(int n,char result[][27]),其中n是輸入的字符數目,你需要生成全排列,并填寫到result數組中。
如果需要,你也可以自己在編輯器中添加子函數。

例:

n=3時
result前6行包含:
abc
acb
bac
bca
cab
cba
(提示:result的行次序并不重要,只要是這6個即可)

解析:
n個值得全排列數目為n!。第一個位置的可能性是n種,那么一共是n*(n-1)!種,同理依次遞推。

int next=0; char s[27];int pai(int start, int end, char result[][27]){if (start >= end) { # 全部遍歷后s[end]=0;strcpy(result[next], s); # 存入一種可能性next += 1; # 計數器} else for(int i=start; i<end; i++){char c;c=s[start];s[start]=s[i];s[i]=c;// swap(s[start], s[i]) # 交換當前位置的可能的值,第一次原地交換,因為當前值的可能性也需要存入pai(start+1,end,result); # 進入(n-1)的全排列c=s[start];s[start]=s[i];s[i]=c;// swap(s[start], s[i]); # 換回之前交換的值,以免位置錯亂。}return 0; }int print(int n,char result[][27]){ /*下面填寫函數的代碼*/char longstr[]="abcdefghijklmnopqrst";longstr[n]=0;strcpy(s, longstr);pai(0,n, result); /********結束******/ }

這題是經典的全排列回溯法模板。

總結

以上是生活随笔為你收集整理的打印字符串(C语言,全排列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。