演算法實驗一 遞迴分治法 窮舉所有排列

2021-09-05 13:04:49 字數 623 閱讀 9407

時限:100ms 記憶體限制:10000k  總時限:300ms

描述輸入乙個小於10的正整數n,按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。

輸入輸入乙個小於10的正整數n。

輸出按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。

輸入樣例

輸出樣例

abcacb

bacbca

cbacab

解析:排列的思想是:如果只有乙個數,那麼直接輸出,如果有n個數,那麼取出乙個,把剩下的n-1個排列就行,剩下n-1個也一步一步分。書上解釋的比較具體,我只記得這樣。具體的實現方法是,從第零個開始,每次找到下乙個,然後將它與後面的每乙個進行交換,做完以他開頭的所有排列,然後換回來。遇到等於n就輸出。這裡注意兩個問題,第乙個是交換完後要記得換回來,每個都要做一遍開頭;第二個是k是從等於i開始的,意思是當前這個也要做頭,我寫的時候想著直接把這個與後面的每個換即可,結果導致了錯誤,後來才改正過來。**如下:

#include

using namespace std;

int n;

char a[11]=;

void swap(int i,int j)

void perm(int i)

演算法實驗一 遞迴分治 快速排序

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述給定乙個數列,用快速排序演算法把它排成公升序。輸入第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出輸出排序後的數列,每個數字佔一行。輸入樣例 53 2 1 4 5 輸出樣例12 ...

演算法實驗一 (遞迴分治) 快速排序

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述給定乙個數列,用快速排序演算法把它排成公升序。輸入第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出輸出排序後的數列,每個數字佔一行。輸入樣例 53 2 1 4 5 輸出樣例12 ...

實驗一 遞迴與分治

1 由0到 4五個數字,組成 5位數,每個數字用一次,但十位和百位不能為 3 當然萬位不能為 0 輸出所有可能的五位數。includeusing namespace std intmain cout 2 程式設計求和 s a aa aaa aaaa aaaa.aaa n個 其中a為1 9a 以後每一...