寒江雪 发表于 2014-4-10 10:39:58

按用户输入的字符,编写程序,输出所有的组合情况。

例如,用户输入:a,b,c 则所有组合情况为: a,b,c,ab,ac,bc,abc

枫界易城 发表于 2014-4-10 12:49:49

过来看看,,,,,,,

最好是明天 发表于 2014-4-10 13:33:46

这个是用什么语言写啊?

Worldmaker 发表于 2014-4-10 21:55:05

本帖最后由 Worldmaker 于 2014-4-10 21:57 编辑

#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 = a;                //将选出的字符存入缓冲区。
      printf("Line: %2d      %s\n", count++, b);                //将缓冲区中选出的字符输出。
      if(i < len-1) search(a, b, i+1);                        //若能继续选择字符,则递归。
      b[--top] = '\0';                //将缓冲区中最后一个字符弹出,缓冲区指针前移一个单位。
    }
}

int main()
{
    char a, b;
    int n;
    memset(a, '\0', sizeof(a));
    memset(b, '\0', sizeof(b));
    printf("请输入待组合字符串:");
    scanf("%s", a);
    search(a, b, 0);
    return 0;
}

Fly_Sheep 发表于 2014-4-11 02:32:34

不仅要要排序 还得组合

寒江雪 发表于 2014-4-13 14:46:41

最好是明天 发表于 2014-4-10 13:33 static/image/common/back.gif
这个是用什么语言写啊?

用你熟悉的语言。。。

寒江雪 发表于 2014-4-13 20:36:43

Worldmaker 发表于 2014-4-10 21:55 static/image/common/back.gif


大神,还不是很会用递归,你能说下你的分析过程么。我第一时间想到的是用组合的定义。。。{:7_163:}{:7_163:}

Worldmaker 发表于 2014-4-13 20:51:31

大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一个字符~
关于递归的程序,最好的理解办法就是跟踪调试一下,通过程序中关键数据的变化来分析~虽然比较麻烦,但如果想真正理解递归,个人认为这是必不可少滴~

九叶子青年 发表于 2014-4-13 21:14:40

支持
支持

寒江雪 发表于 2014-4-14 00:34:09

Worldmaker 发表于 2014-4-13 20:51
大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一 ...

你好厉害@_@@_@

Worldmaker 发表于 2014-4-14 07:21:25

寒江雪 发表于 2014-4-14 00:34 static/image/common/back.gif
你好厉害@_@@_@

嘿嘿,过奖了,一起加油~
页: [1]
查看完整版本: 按用户输入的字符,编写程序,输出所有的组合情况。