版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weclove2008/article/details/75039595
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
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;
}