【ZZULIOJ】1207: 字串問題
阿新 • • 發佈:2018-12-05
1207: 字元排列問題
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 164 Solved: 143
Submit Status Web Board
Description
有n個字母,列出由該字母組成的字串的全排列(相同的排列只計一次)。
Input
第一行輸入是字母個數n,1<=n<=20。接下來一行輸入的是待排列的n個字母。
Output
計算出的n 個字母的所有不同排列總數
Sample Input
4aaccSample Output
6HINT
Source
#include <iostream>
#include <cstring>
using namespace std;
/*如果按照排列組合的知識是很好理解的,不過
我是找規律的
所有基礎字母種樹的階乘 N!
乘上重複的字母(可以理解為插空法)
得出全排列數
*/ long f(int n) //creat階乘函式 { long sum=1; n++; while(--n) { sum*=n; } return sum; } int main(int argc, char** argv) { int n; cin>>n; char str[20]; long x=0,y=0,z=0; cin>>str; for(int i=0;i<n;i++) { //獲取當前的第一個字元 //開始查詢 if(str[i]) //排除已檢查過的字元 { //IF只能判斷true或者false y++; for(int j=i+1;j<n;j++) { if(str[j]==str[i]) { str[j]='\0'; x++; } } } } z=f(y)*(1+x); cout<<z<<endl; }