一道编程题,急!!!用C或VFP实现。。。

来源:百度知道 编辑:UC知道 时间:2024/05/13 08:59:56
输入数组(或字符串):a b c d e
输出其各阶组合: 一阶: a b c d e
二阶: ab ac ad ae bc bd be cd ce de
三阶: abc abd abe acd ace ade bcd bce bde cde
四阶: abcd abce abde acde bcde
五阶: abcde
注:输入的数组可能是任意多个元素(但每个元素都是一个字符)
谢谢你给出完整的代码。 我的问题当时写得急了, 没有完全表述清楚,如你后来所说,我确实是想把每阶的结果保存起来备用的,而不是直接输出,且,我的每下一阶的结果是由其前一阶的结果组合出来的,不是由初始输入的字符组合出来的(因为每一阶算完后,有的不符合条件的字符串要删除的,余下的再组成下一阶)
如输入 a b c d 其二阶 ab ac ad bc bd cd 可能会把ac bd 两项删除, 然后由剩余的ab ad bc cd 组合成三阶: abd abc acd bcd (只有四项了)另: 我的这个题目输入的规模确实超大,可能不适合用递归做,不过我可以根据你的思路再想想吧。
还是谢谢三楼, 分给你了。

这道题目值5分呢。
用递归。。。呵呵,想了好久。
#include <stdio.h>
#include <string.h>
void print(char *a,char *b){
if(strlen(a)==0){
printf(" ");
return;
}

char *tmp;
int len=strlen(b);
tmp = a+1;
print(tmp,b);

printf("%s%c",b,a[0]);
b[len]=a[0];
b[len+1]=0;
print(tmp,b);

b[len]=0;
}
int main(){
char str[100],help[100];
memset(help,0,100);
scanf("%s",str);
print(str,help);
printf("\n");
return 0;
}
程序可以打印出所有的组合可能。下面是一点意见和没有实现的说明。
题目要求各阶输出,其实并不难。把上文的print函数添加一个参数--count,每次递归不打印,而是将要打印数据保存起来。每次在字符数目等于count的时候打印。
主函数中,调用N次,每次输出一种阶数的结果。我没有实现是因为觉得自己现在写的这个递归程序是在太不美了,没心思美化它了,希望有人能帮我改进一下。最近在看递归函数论,也希望大家都能更重视递归。
还有就是,题目的时间复杂度挺高。递归实现只适合N不太大的情况。

就是排列组合
程序简单
但是繁琐

不值5分