组成3个数字的号码,含排列(有顺序)和组合(无顺序):
 一是从3个edit中各选一个组成号码;
 二是从10个checkbox中任选组成号码;

解决方案 »

  1.   


    function StrInList(str:string;strs:TStrings):boolean;
    begin
        Result:=(strs.IndexOf(str[1]+str[2]+str[3])>=0)
                or (strs.IndexOf(str[1]+str[3]+str[2])>=0)
                or (strs.IndexOf(str[2]+str[1]+str[3])>=0)
                or (strs.IndexOf(str[2]+str[3]+str[1])>=0)
                or (strs.IndexOf(str[3]+str[1]+str[2])>=0)
                or (strs.IndexOf(str[3]+str[2]+str[1])>=0);
    end;procedure AddStrToDisStrs(str:string;strs:TStrings);
    begin
        if not StrInList(str,strs) then
            strs.Add(str);
    end;procedure AddStrToStrs(str:string;strs:TStrings);
    begin
        if strs.IndexOf(str)<0 then
            strs.Add(str);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
        i,j,k:integer;
        a,b,c:string;
    begin
        for i:=1 to Length(Edit1.Text) do
            for j:=1 to Length(Edit2.Text) do
                for k:=1 to Length(Edit3.Text) do
                begin
                    a:=Edit1.Text[i];
                    b:=Edit2.Text[j];
                    c:=Edit3.Text[k];
                    AddStrToStrs(a+b+c,Memo1.Lines);
                    AddStrToStrs(a+c+b,Memo1.Lines);
                    AddStrToStrs(b+a+c,Memo1.Lines);
                    AddStrToStrs(b+c+a,Memo1.Lines);
                    AddStrToStrs(c+a+b,Memo1.Lines);
                    AddStrToStrs(c+b+a,Memo1.Lines);                AddStrToDisStrs(a+b+c,Memo2.Lines);
                end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
        i,j,k:integer;
        a,b,c:string;
        strs:TStringList;
    begin
        strs:=TStringList.Create;
        for i:=0 to ControlCount-1 do
            if Controls[i].ClassName='TCheckBox' then
                if TCheckBox(Controls[i]).Checked then
                    strs.Add(TCheckBox(Controls[i]).Caption);    for i:=0 to strs.Count-1 do
            for j:=0 to strs.Count-1 do
                for k:=0 to strs.Count-1 do
                begin
                    a:=strs.Strings[i];
                    b:=strs.Strings[j];
                    c:=strs.Strings[k];
                    AddStrToStrs(a+b+c,Memo1.Lines);
                    AddStrToStrs(a+c+b,Memo1.Lines);
                    AddStrToStrs(b+a+c,Memo1.Lines);
                    AddStrToStrs(b+c+a,Memo1.Lines);
                    AddStrToStrs(c+a+b,Memo1.Lines);
                    AddStrToStrs(c+b+a,Memo1.Lines);                AddStrToDisStrs(a+b+c,Memo2.Lines);
                end;    strs.Free;
    end;