有重複元素的排列問題pascal題解

2021-07-25 03:12:07 字數 1024 閱讀 4830

var

l,i,tj:longint;

a:array['a'..'z']of longint;

x,c:char;

b:array[0..500]of char;

procedure print;

begin

for i:=1 to l do//要乙個乙個輸出,不能直接write(b),不然就輸出不出來

write(b[i]);

writeln;//換行

inc(tj);

end;

procedure search(x:char;dep:longint);//dep是當前要填的位置

vari:char;

begin

if dep>l then//如果填的位置大於長度那麼就輸出

begin

print;

exit;

end;

for i:=x to 'z' do

if a[i]>0 then//如果i字元還有沒填的話,就回溯

begin

b[dep]:=i;//填數

dec(a[i]);//i字元的數量-1

if a[x]>0 then search(x,dep+1) else search(chr(ord(x)+1),dep+1);//如果x字元在原串中還有出現次數就繼續搜

inc(a[i]);//回溯

end;

end;

begin

readln(l);// l個元素,也是排列的長度

for i:=1 to l do

begin

read(x);

inc(a[x]);//統計每個元素有幾個

end;

tj:=0;//tj是排列總數

c:='a';

while a[c]=0 do c:=chr(ord(c)+1);//找到原串中第乙個在26個字母中出現的字元

search(c,1);//搜尋

write(tj);//輸出數量

end.

有重複元素的排列問題

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

有重複元素的排列問題

問題描述 設r 是要進行排列的n個元素。其中元素r1,r2 rn可能相同。試設計乙個演算法,列出r的所有不同排列。程式設計任務 給定n 以及待排列的n 個元素。計算出這n 個元素的所有不同排列。輸入格式 檔案的第1 行是元素個數n,1 n 500。接下來的1 行是待排列的n個元素。輸出格式 計算出的...

有重複元素的排列問題

題目描述 設r 是要進行排列的n個元素。其中元素r1,r2 rn可能相同。試設計乙個演算法,列出r的所有不同排列。給定n 以及待排列的n 個元素。計算出這n 個元素的所有不同排列。輸入輸入資料的第1 行是元素個數n,1 n 500。接下來的1 行是待排列的n個元素。輸出計算出的n個元素的所有不同排列...