如何列举出 1....9 所有的排列组合?只求思路!谢谢!

解决方案 »

  1.   

    9个数种取几个的排列组合呢?
    9取2用
    for i:=1 to 9 do
    Begin
         for j:=i+1 to 9 do 
         Begin
             //put your code here
             showmessage(inttostr(i)+','+inttostr(j)); 
         End;
    End;
      

  2.   

    for i:=0 to 999999999 do
    begin
        writeln(i);
    end;
      

  3.   

    to:  flyingkiller(大飞虫) 我想要这9个数的排列组合to:  cuihl()   拜托请您先弄明白排列组合的概念!to:  zfpcb(我是你的传说)  排列组合的个数好象是9!另外花多少时间我都要去算,用N个变量我也要去做,我想知道的是思路啊,老大!
      

  4.   

    to: weibz0525(小虫) 就算我有的问题没说清楚,但我‘只求思路!’四个字你做何解释?把代码一贴了事,我也有,但我是来请教思路的!!也不知谁还能把‘只求思路!’这四个字理解错!
      

  5.   

    to: fermium(列御寇) 您能简单说一下思路吗?谢谢!
      

  6.   

    //这是个简单的递归程序如果楼主一定要思路就简单说一下,求一个nMax个数中取nMax个数的排列可以这样处理,先在位置1任选一个未用的数,标记这个数已用,然后为下一位置选一个未用数,直到nMax个位置都有数就行了。
    const nMax=9;
    var
      Form1: TForm1;
       outres:array[1..nMax] of char;
       bused:array[1..nMax] of boolean;
       temp:integer;
    implementation{$R *.dfm}procedure test(m,n:integer);
    var
       i:integer;
    begin
       if m=nMax+1 then//已经得到一个完整组合,如果等于m=k,表示结果是k字排列
       begin
           form1.edit1.text:=string(outres);
           form1.Edit1.Refresh;
           application.ProcessMessages;
       end
    //         showmessage(outres)
       else
       for i:=1 to nMax do
       begin
    if not bUsed[i] then//选一个可用的数
            begin
                outres[m]:=chr(i+48);
                bUsed[i]:=true;//标明已经用过
                test(m+1,i);
                bUsed[i]:=false;//前个位置的数要被更换,该数可用,如第一组数为12,当前为位置2,当为位置2以后选数时,2不可用,但位置1的数要改变时,2可用。
            end;
       end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
       temp:integer;
    begin
       outres[9]:=#0;
       for temp:=1 to 9 do  bused[temp]:=false;
       test(1,1);
    end;
      

  7.   

    procedure test(m,n:integer);
    var
       i:integer;
    begin
       if m=n+1 then//表示结果是n字排列//////////////////////
       begin
           form1.edit1.text:=string(outres);
           form1.Edit1.Refresh;
           application.ProcessMessages;
       end
       else
       for i:=1 to nMax do
       begin
    if not bUsed[i] then
            begin
                outres[m]:=chr(i+48);
                bUsed[i]:=true;
                test(m+1,n);
                bUsed[i]:=false;
            end;
       end;
    end;
      

  8.   

    procedure test(m,n:integer);
    var
       i:integer;
    begin
       if m=n+1 then  //表示结果是n字排列////
       begin
           form1.edit1.text:=string(outres);
           form1.Edit1.Refresh;
           application.ProcessMessages;
       end
       else
       for i:=1 to nMax do
       begin
    if not bUsed[i] then
            begin
                outres[m]:=chr(i+48);
                bUsed[i]:=true;
                test(m+1,n);
                bUsed[i]:=false;
            end;
       end;
    end;有问题的