有重複元素的全排列
阿新 • • 發佈:2018-12-09
題目描述
集合S中有n個元素,其中的元素可能重複,設計一個演算法,計算出S的不同排列字元全部由小寫字母組成,
輸出按照字典序輸出
n <= 9
輸入
第一行一個整數n
第二行一個字串包含n個字母
輸出
所有的全排列
最後一行輸出個數
樣例輸入
4
aacc
樣例輸出
aacc
acac
acca
caac
caca
ccaa
6
程式碼如下
#include<cstdio> #include<iostream> using namespace std; int main(){ int len; int count=0; char str[9]; scanf("%d",&len); cin>>str; int i; int j; int flag=1; for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ if(str[i]-str[j]>0){ swap(str[i],str[j]); } } } while(flag){ for(int k=0;k<len;k++){ cout<<str[k]; } count++; printf("\n"); for(i=len-2;i>=0 && str[i]>=str[i+1];i--); if(i<0){ printf("%d\n",count); flag=0; } for(j=len-1;j>i && str[j]<=str[i];j--); swap(str[i],str[j]); for(int m=i+1,n=len-1;m<n;m++,n--) swap(str[m],str[n]); } return 0; }
執行結果如下