含有重複元素的排列

2021-09-21 16:39:07 字數 737 閱讀 8692

設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 4

using

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...