练习65

来源:互联网 发布:汽油机的数据求效率 编辑:程序博客网 时间:2024/05/01 16:17
/*********************************************************************************  65. ( NOI'94.1_1 ) 键盘输入一个仅由小写字母组成的字符串,输出以该串中任 取M个字母的所有排列及排列总数。  *******************************************************************************/#include <stdio.h> #include <string.h> #include <malloc.h> char str[100];int m;int counter = 0;//生成排列 void combine(int *a,int n,int r){    if(r == 0)    {        int i;        for(i=0; i<m; i++)            printf("%c ",str[a[i]]);        printf("/n");        counter ++;    }    else if(n >= r)    {        a[r-1] = n-1;        combine(a,n-1,r-1);        combine(a,n-1,r);    }}void main(){    int n;    int *a;    printf("请输入一个字符串:/n");    if(!gets(str))    {        printf("Input fail!/n");        return;    }    printf("m=");    scanf("%d",&m);    n = strlen(str);    if(n<m)    {        printf("m不符合!/n");        return;    }    a = (int*)malloc(m*sizeof(int));    combine(a,n,m);    printf("一共有%d种排法!/n",counter);    free(a);}


 

原创粉丝点击