1. 程式人生 > >【ZZULIOJ】1207: 字串問題

【ZZULIOJ】1207: 字串問題

1207: 字元排列問題

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 164   Solved: 143

Submit Status Web Board

Description

有n個字母,列出由該字母組成的字串的全排列(相同的排列只計一次)。

Input

第一行輸入是字母個數n,1<=n<=20。接下來一行輸入的是待排列的n個字母。

Output

計算出的n 個字母的所有不同排列總數

Sample Input

4aacc

Sample Output

6

HINT

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; 	
}