字符排列问题

来源:互联网 发布:微商货源网源码 编辑:程序博客网 时间:2024/06/05 16:04

字符排列问题

题目描述

n个字母,列出由该字母组成的字符串的全排列(相同的排列只计一次)。

输入

第一行输入是字母个数n1<=n<=20。接下来一行输入的是待排列的n个字母。

输出

计算出的n个字母的所有不同排列总数

样例输入

4

aacc

样例输出

6

/*看到这个题首先想到对n个字符全排列,这当然会用到阶乘,将阶乘所得值赋值给ans,定义一个变量b,赋初值为1,从1-n判断前后两个字符是否相等,若相等,b加1,直到循环结束,输出结果为ans/b的值!*/#include <stdio.h>#include <stdlib.h>#include <string.h>int cmp(const void *a,const void *b){    return *(char *)a-*(char *)b;}int main(){    int n;    char s[21];    while(scanf("%d %s",&n,s)!=EOF)    {        qsort(s,n,sizeof(s[0]),cmp);        long ans=1,b=1;        int i;        for(i=1;i<=n;i++)            ans*=i;        for(i=1;i<n;i++)        {            if(s[i]==s[i-1])                b++;            else            {                ans/=b;                b=1;            }        }        ans/=b;        printf("%ld\n",ans);    }    return 0;}


0 0
原创粉丝点击