【ZZULIOJ】1207: 字符串问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weclove2008/article/details/75039595

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



猜你喜欢

转载自blog.csdn.net/weclove2008/article/details/75039595