现在有一个很不好处理的问题,我现在选了8个数,从8个数中再任选4个,求出4个数的所有组合,并列出来,这8个数并不是连续的,如何处理?

解决方案 »

  1.   

    呵呵,给分unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      s:String;
      i,j,k:Integer;
      a:Array[1..8] of Integer;
      b:Array[1..4] of Integer;
      bSame:Boolean;
    begin
      Memo1.Lines.Clear;  Randomize;
      Memo1.Lines.Add('选取八个不同的整数为:');
      i:=1;
      While i<=8 do
      begin
        a[i]:=Random(1000);//每个数的取值范围为0到1000    bSame:=False;
        for j:=1 to i-1 do
        begin
          if a[i]=a[j] then
          begin
            bSame:=True;
            Break;
          end;
        end;
        if not bSame then Inc(i);
      end;  s:=IntToStr(a[1]);
      for i:=2 to 8 do s:=s+', '+IntToStr(a[i]);
      Memo1.Lines.Add(s);//显示这8个数
      Memo1.Lines.Add('');  Randomize;
      Memo1.Lines.Add('从8个数中任取四个为:');
      i:=1;
      While i<=4 do
      begin
        b[i]:=1+Random(7);    bSame:=False;
        for j:=1 to i-1 do
        begin
          if b[i]=b[j] then
          begin
            bSame:=True;
            Break;
          end;
        end;    if not bSame then Inc(i);
      end;
      for i:=1 to 4 do b[i]:=a[b[i]];
      s:=IntToStr(b[1]);
      for i:=2 to 4 do s:=s+', '+IntToStr(b[i]);
      Memo1.Lines.Add(s);
      Memo1.Lines.Add('');  Memo1.Lines.Add('这四个数的所有组合为:');  //一个数的组合
      for i:=1 to 4 do Memo1.Lines.Add(IntToStr(b[i]));  //两个数的组合
      for i:=1 to 4 do
        for j:=i+1 to 4 do
          Memo1.Lines.Add(IntToStr(b[i])+', '+IntToStr(b[j]));  //三个数的组合
      for i:=1 to 4 do
        for j:=i+1 to 4 do
          for k:=j+1 to 4 do
            Memo1.Lines.Add(IntToStr(b[i])+', '+IntToStr(b[j])+', '+IntToStr(b[k]));  //四个数的组合
      Memo1.Lines.Add(IntToStr(b[1])+', '+IntToStr(b[2])+', '+IntToStr(b[3])+', '+IntToStr(b[4]));
    end;end.
      

  2.   

    非常感谢firstshine(黑里透红) 
    分数实在太少了,确实有点拿不出手,对你的热心我非常......
    言语无法表达,真想请你来新疆聚一下,请你吃烤肉喝啤酒,呵呵!
    什么时候能来?
    跟我联系,[email protected]