如:輸入乙個數,輸出1~n的全排列
假如有編號有1、2、3的3張撲和編號為1、2、3的3個盒子,現在需要將這3張撲克牌分別放到3個盒子裡面,並且每個盒子有且只有一張撲克牌。
拿著3張撲克牌,每次到乙個盒子面前是,都先放1號,再放2號,再放3號。首先走到1號盒子前,將1號撲克牌放到1號盒子中,現在手中有兩張牌,走到2號盒子前,放入第二張牌,放好後來到3號盒子,此時手中只剩一張3號牌了,所以將3號牌放進3號盒子,再往前走一步,到了4號盒子,但沒有4號盒子,不需要4號盒子,此時完成了一種排列,即『123』;
產生一種排列後需立即返回,現在需要退一步來到3號盒子,取回3號盒子的牌,再嘗試看看是否放別的牌,從而產生新的排列,取回3號牌,往3號盒裡放新的牌,但手中只有3號牌,所以往回推推一步,回到2號盒前,收回2號牌,現在有兩張牌2號盒3號,現在需要往2號盒放3號撲克牌,放好之後來到3號盒前放入僅剩的2號撲克牌,又來到4號盒,一種新的排列產生了『132』。接下來按照剛才的步驟去模擬,依次產生的排列為 『213』 『231』 『312』 『321』
**實現如下:
#includeint a[10],book[10],n;//c語言的全域性變數在沒賦值前預設為0.
void dfs(int step)//step表示站在第幾個盒子前
printf("\n");
return;//返回之前的一步(最近一次呼叫dfs的地方)
} //此時站在第step個盒子面前,按照1,2,3....的順序一一嘗試
for(i=1;i<=n;i++)
} return;
}int main()
#include #define n 81
int strlength(char s)
return i;
}int main()
strcpy函式1.形式:strcpy(目標位址,「字串」)
功能:將字串複製到從目標位址開始的連續的儲存單元中
2.形式:strcpy(目標位址,原位址)
功能:將從原位址開始的字串(含『\0』)複製到從目標位址開始的連續的儲存單元中。
#include void stringcopy(char s2,char s1)
int main()
陣列名是常量,不能賦值,不能向字元陣列名直接賦字串。
陣列名存放字串兩種方式
1>初始化。如:char s[81]=「china」;
2>strcpy函式。如:char s2[81]; strcpy(s2,「china」);
1.strcat(位址,「字串」)
功能:從所給位址開始找到第乙個』\0』,連線字串
2.strcat(目標位址,原位址)
功能:將從原位址開始的字串(包括』\0』),複製到目標位址開始的』\0』的連續的儲存單元中
#include #include #define n 81
void stringstrcat(char s1,char s2)
int main()
strcpy函式與strcat函式的區別
strcpy是將字串從目標位址開始複製,對原字串而言會有字元損失,strcat是將字串從目標位址開始找到第乙個』\0』再開始連線,不會有字元損失。
STL中的全排列函式實現全排列
標頭檔案 inlcude這裡先說兩個概念 下乙個排列組合 和 上乙個排列組合 對序列 每乙個元素都比後面的小,按照字典序列,固定a之後,a比bc都小,c比b大,它的下乙個序列即為,而的上乙個序列即為,同理可以推出所有的六個序列為 其中沒有上乙個元素,沒有下乙個元素。a.函式模板 next permu...
全排列函式
一 next permutation 函式,作用是輸出所有比當前排列 排列大的排列 順序為由小到大排 include include includeusing namespace std int main string str cin str while next permutation str.b...
全排列函式
人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把乙個非常大的數字告訴人類科學家,科學家破解這個數字的含義後,再把乙個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。火星人用...