您的位置:首页 > 其它

abc排列问题

2015-05-08 19:16 288 查看
例:
用户输入:a,b,c
输出: a,b,c,ab,ac,bc,abc
解:此程序应不仅适用于3个字符的情况~运用递归即可解决:
法1:

[cpp] view
plaincopyprint?





#include<stdio.h>  

#include<string.h>  

  

#define MAX 100  

  

int top = 0;        //缓冲区指针。  

int count = 1;      //统计组合数。  

  

void search(char *a, char *b, int start)    //a:待组合的字符串;b:缓冲区数组;start:当前开始位置。  

{  

    int i, len = strlen(a);  

    for(i = start; i < len; i++)  

    {  

        b[top++] = a[i];        //将选出的字符存入缓冲区。  

        printf("Line: %2d   %s\n", count++, b);     //将缓冲区中选出的字符输出。  

        if(i < len-1) search(a, b, i+1);         //若能继续选择字符,则递归。  

        b[--top] = '\0';        //将缓冲区中最后一个字符弹出,缓冲区指针前移一个单位。  

    }  

}  

  

int main()  

{  

    char a[MAX], b[MAX];  

    int n;  

    memset(a, '\0', sizeof(a));  

    memset(b, '\0', sizeof(b));  

    printf("请输入待组合字符串:");  

    scanf("%s", a);  

    search(a, b, 0);  

    return 0;  

}  

运行结果:



法2:

[cpp] view
plaincopyprint?





#include <stdio.h>  

#include <string.h>  

  

int main()  

{  

    int i, j, n;  

    char str[100];  

    scanf("%s", str);  

    n = strlen(str);  

    for (i = 1; i < 1<<n; ++i)//组合的个数。  

    {  

        for (j = 0; j <= n-1; ++j)//依次输出符合条件的字符。  

            if (1<<j & i) putchar(str[j]);  

        puts("");  

    }  

    return 0;  

}  

结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: