按用户输入的字符,编写程序,输出所有的组合情况。
例如,用户输入:a,b,c 则所有组合情况为: a,b,c,ab,ac,bc,abc 过来看看,,,,,,, 这个是用什么语言写啊? 本帖最后由 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;
}
不仅要要排序 还得组合 最好是明天 发表于 2014-4-10 13:33 static/image/common/back.gif
这个是用什么语言写啊?
用你熟悉的语言。。。 Worldmaker 发表于 2014-4-10 21:55 static/image/common/back.gif
大神,还不是很会用递归,你能说下你的分析过程么。我第一时间想到的是用组合的定义。。。{:7_163:}{:7_163:} 大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一个字符~
关于递归的程序,最好的理解办法就是跟踪调试一下,通过程序中关键数据的变化来分析~虽然比较麻烦,但如果想真正理解递归,个人认为这是必不可少滴~ 支持
支持 Worldmaker 发表于 2014-4-13 20:51
大致的思路就是:先从a开始,输出所有可能的组合;再从b开始,输出所有可能的组合;再从。。。一直到最后一 ...
你好厉害@_@@_@ 寒江雪 发表于 2014-4-14 00:34 static/image/common/back.gif
你好厉害@_@@_@
嘿嘿,过奖了,一起加油~
页:
[1]