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個元素的所有不同排列...