递归算法,求解!
我给出三个字符串: abc
怎样知道他的全部排制方式, 比如:
a, b, c, aa, ab, ac, ba, bb, bc, ca.....
等,请高手指点!谢谢!
问题点数:0、回复次数:7Top
1 楼zzlingaaa(小舟)回复于 2003-11-03 10:32:11 得分 0
用得着递归吗?循环穷举一下不就可以了?Top
2 楼yao518(一剑飘雪)回复于 2003-11-03 20:25:42 得分 0
循环有太多代码了,如果想知道任意代码的所有排列,那么循环就不行了!Top
3 楼donny2000(阿峰)回复于 2003-11-03 20:44:36 得分 0
函数我就不写了 方法如下:
一个字符只有一种
2个字符 三种
判断字符的长度 > 2
取出 第一个字符 剩余的字符 递规调用该函数Top
4 楼passos(古月春秋)回复于 2003-11-07 01:04:05 得分 0
procedure AllList(FullStr: String; ResultStr: String; MaxLength: Integer);
var
I: Integer;
begin
if Length(ResultStr) = MaxLength then
begin
Writeln(ResultStr);
Exit;
end;
for I := 1 to Length(FullStr) do
begin
if Pos(FullStr[I], ResultStr) = 0 then
AllList(FullStr, ResultStr + FullStr[I], MaxLength);
end;
end;
调用
var
I: Integer;
S: String;
begin
S := 'abcdefgh';
for I := 1 to Length(S) do
AllList(S, '', I);
readln;
end.Top
5 楼bitamd(虫虫)回复于 2003-11-10 21:02:42 得分 0
感觉这段代码有点问题把:)
如果输入的字串中有重复的就出现问题了:)Top
6 楼passos(古月春秋)回复于 2003-11-11 00:17:38 得分 0
输入的串有重复你说该怎么做呢?去掉?全排列的输入本来就不应该是有重复的,即使有也是应该按照输入的来做的。或者你给一个比较好的解决方案?Top
7 楼cnhxjt(瓶子)回复于 2003-11-11 10:59:57 得分 0
支持 passos(古月春秋)Top




