不答也来看看啊..在线等....(50分)

  • 主题发起人 主题发起人 wutaoqing
  • 开始时间 开始时间
W

wutaoqing

Unregistered / Unconfirmed
GUEST, unregistred user!
在Edit中  随便写入一个英文单词 
结果:用代码怎么样才可以显示出  写入单词的字母任意组合
eg:Edit中写入了  are
  请问用代码怎么样才可以得出结果 are aer rae rea ear era
 
看看,算法问题.
 
to sefeng1982:
怎么样的算法??可以写出来我看看吗????
 
怎么了??
是我没说清楚  还是高手都休假了??
或者是大家对我的问题没兴趣吗??
Please Help Me!! tel: 911
 
var s: string; n,i: integer;
s:=trim(edit1.text);
n:=length(s);
for i:=0 to n-1 do
begin
list1.additem(s + stringReplace(s,s,'',[]),nil);
end;
 
再加上下面一句
for i:=0 to n-1 do
begin
listbox1.additem(s[i+1] + stringReplace(s,s[i+1],'',[]),nil);
listbox1.additem(stringReplace(s,s[i+1],'',[]) + s[i+1],nil);
end;
 
to:雾锁长河
   每个都重复了一次
 
to:雾锁长河
  不对哦  重复了原始的一次  但是还是少了一次
我测试过   输入 abc   
   但是返回的结果是:  abc
bca
bac
acb
cab
abc
abc重复了  少了个cba
 
修改一下:
放一个listbox 上去:

var
s: string;
n,i: integer;
begin
s:=trim(edit1.text);
n:=length(s);
for i:=1 to n do
begin
listbox1.additem(s + stringReplace(s,s,'',[]),nil);
end;
end;
你看看效果先
 
to:hongxing_dl
不对哦   不对   你和  雾锁长河  说的差不多
 
var s,s1: string; n,i: integer;
begin
s:=trim(edit1.text);
n:=length(s);
for i:=0 to n-1 do
begin
listbox1.additem(s[i+1] + stringReplace(s,s[i+1],'',[]),nil);
if i<>n-1 then listbox1.additem(stringReplace(s,s[i+1],'',[]) + s[i+1],nil);
//这里如果是最后一个字母则不加入listbox
end;
for i:=n downto 1 do
begin
s1:=s1 + s; //逆序所有字母
end;
listbox1.AddItem(s1,nil); //加入listbox
end;
 
楼上的对了,又学到一招[:D]
 
to:雾锁长河
好接近了  快要达到效果了
  输入   a时候   返回 a a
输入   ab时候   返回ab ba ba ba
输入   abc时候   返回abc bca bac acb cab cba  (完全正确)
输入   abcd时候   返回abcd bcda bacd acdb cabd abdc dabc dcba (只返回了8                                    个)
 
上面的代码没有考虑连续相同字母的情况,如abb
下面是修正后的代码:
var s,s1: string; n,i: integer;
begin
s:=trim(edit1.text);
n:=length(s);
for i:=0 to n-1 do
begin
s1:= s[i+1] + stringReplace(s,s[i+1],'',[]);
if listbox1.Items.IndexOf(s1)=-1 then
listbox1.additem(s1,nil);
s1:= stringReplace(s,s[i+1],'',[]) + s[i+1];
if listbox1.Items.IndexOf(s1)=-1 then
listbox1.additem(s1,nil);
end;
s1:='';
for i:=n downto 1 do
begin
s1:=s1 + s;
end;
if listbox1.Items.IndexOf(s1)=-1 then
listbox1.AddItem(s1,nil);
end;
 
這種問題用c寫過...
1..4..8..16..32...
 
to:雾锁长河 大哥
   好象还不对哦    1--3个字母的时候 都正确  
   当出先4个字母的时候  就会少掉  4个字母本来有24中情况  但是你的代码只出现了8种情况  
 
雾锁长河  大哥  再帮忙修改下  3Q大哥
 
procedure TForm1.Button1Click(Sender: TObject);
var
s, tmp : string;
n,i,j,k : integer;
begin
s := trim(edit1.text);
n := length(s);
for i := 1 to n do
for j := 1 to n do
for k := 1 to n do
begin
if (i = j) or (i = k) or (j = k) then
Continue
else
Tmp := s + s[j] + s[k];
Listbox1.Items.Add(tmp);
end;
end;

这样可以不?
 
如果考虑字数变化的话,看看用递归的方法行不行?
 
TO:wino
哇色  方法太好了
根据字母不同的个数  写出不同的 for..to..
  是不是说  只有一个字母 只要一个变量for..to..
        只有2个字母 只要2个变量for..to..
        只有3个字母 只要3个变量for..to..
        只有4个字母 只要4个变量for..to..
...... 
 
呵呵,如果事先可以定义输入的字符有最大长度的话就好办了,例如长度为10,那么写10个这样的for(看起来有些笨哈)循环,在每个for之前判断一下Length,如果大于这个for,那这个for就执行,否则continue

正在想更好的办法。。。
 
后退
顶部