鱼C论坛

 找回密码
 立即注册
查看: 3691|回复: 10

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

[复制链接]
发表于 2014-4-10 10:39:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例如,用户输入:a,b,c 则所有组合情况为: a,b,c,ab,ac,bc,abc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-10 12:49:49 | 显示全部楼层
过来看看,,,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-10 13:33:46 | 显示全部楼层
这个是用什么语言写啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[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;
}

运行结果

运行结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-11 02:32:34 | 显示全部楼层
不仅要要排序 还得组合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-13 14:46:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-13 20:36:43 | 显示全部楼层

大神,还不是很会用递归,你能说下你的分析过程么。我第一时间想到的是用组合的定义。。。{:7_163:}{:7_163:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-13 20:51:31 | 显示全部楼层
大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一个字符~
关于递归的程序,最好的理解办法就是跟踪调试一下,通过程序中关键数据的变化来分析~虽然比较麻烦,但如果想真正理解递归,个人认为这是必不可少滴~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-13 21:14:40 | 显示全部楼层
支持
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-14 00:34:09 From FishC Mobile | 显示全部楼层
Worldmaker 发表于 2014-4-13 20:51
大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一 ...

你好厉害@_@@_@
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-14 07:21:25 | 显示全部楼层
寒江雪 发表于 2014-4-14 00:34
你好厉害@_@@_@

嘿嘿,过奖了,一起加油~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表