設r=是要進行排列的n個元素。其中元素r1 ,r2 ,……,rn可能相同。試設計乙個演算法,列出r的所有不同排列。給定n以及待排列的n個元素。計算出這n個元素的所有不同排列。
輸入資料的的第1行是元素個數n,1≤n≤500。接下來的1行是待排列的n個元素。
將計算出的n個元素的所有不同排列輸出,每種排列佔1行,最後1行中的數是排列總數。
4 aacc
aacc
acac
acca
caac
caca
ccaa
6
分析:和普通求全排列問題差不多,只是多了,判斷是否重複字元而已。
關於無重複元素的排列,可以參考:
1 #include 2 #include 3 #include 4using
namespace
std ;
5long
long
ans;
6int ok(char str,int a ,int
b )7
14void perm(char str,int k,int
m)15
25else
for(i=k;i<=m;i++)
26if
(ok(str,k,i))
273233}
34int
main()
35
組合問題(不含有重複元素)
可以參考 include using namespace std int res 0 intf int n,int m else if n m else int main 使用抽取法列舉出每一種組合排序的情況。通常將組合的結果放入新的結果陣列中,從原始陣列中抽取元素放入結果陣列中。如下 示例 inc...
全排列 不含重複元素
總結定義 從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。示例 對陣列或者字串進行全排列時,一般要求得出所有的排列結果。排列結果中的每個元素來自於原始陣列,數量和內容與原始陣列相同,只是元素的位置發生了改變...
有重複元素的排列問題
源 include include include using namespace std long long ans int ok char str,int a int b fscanf ft,d n fscanf ft,s str i ans 0 perm fp,str,0,n 1 fprint...