在1-33个几个数中,给出6个不重复的数使得6个数的和为指定的值(例如100),列出所有的这6个数的可能的Delphi代码!!!!

解决方案 »

  1.   

    套几个for 循环,把所有可能情况都试一遍,应该可以解决的
      

  2.   

    a,b,c,d,e,f
    sum然后就是循环
    a=1时b=2,c=3,d=4,e=5,f=6
    5个欠套,
    里面注意下的是取值,a取1后,计算完后,a取2计算时,b,c,d,e,f就不需要再取1了
    再取的话,只会是重复的数字,而且计算下来,量非常大,要好久,所以得优化下
      

  3.   


    数组,肯定用数组,具体限制忘了
    大概定义个255的把,然后不要用for了,用函数的欠套了,这个学校应该有教把
      

  4.   

    首先用C(99,n-1)计算出将100分成n部分的方法再检验, 也许还能递归一下.
      

  5.   

    递归, 带重复结果的算法,先看着, 优化ing...unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Spin, StdCtrls;const
    RangeMin = 1;
    RangeMax = 33;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        SpinEdit1: TSpinEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure GetSum(Start:Integer; TargetSum : integer; AddCount: Integer; Path : string);
      end;var
      Form1: TForm1;
      StrList : TStringList;implementation{$R *.dfm}
    procedure TForm1.GetSum(Start, TargetSum, AddCount: Integer; Path : string);
    var
    i : integer;
    begin
       if AddCount>1 then
       for i:=Start+1 to RangeMax do
         GetSum(i,TargetSum-Start, AddCount-1,  Path+'#'+IntToStr(Start))
       else
        begin
         for i:=Start to RangeMax-1 do
            if i=TargetSum then
               begin
                StrList.Add(Path+'#'+IntToStr(i));
                break;
               end;
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    i : integer;
    begin
     StrList.Clear;
     for i:=RangeMin to RangeMax do
       GetSum(i,100,6,'');
     Memo1.Lines.Assign(StrList);
    end;initialization
      StrList := TStringList.Create;
    finalization
      StrList.Free;
    end.
      

  6.   

    算法思路:
    假设目标区间是1-10,即1-10里面的n个数相加得到某个结果Y,
    1<=x<=10
    X1+X2+..Xn=Y1 2 3 4 5 6 7 8 9 10
    递归思路如下:
    假设要求1-10之内的3个数相加=15,则首先确定第一个数为1,则目标函数变成2-10的两个数相加=15-1=14,递归到下一层,假设第二个数确定为2,则目标函数变成3-10之间的数为14-2=12。这就是递归思路算法的递归过程是:X1=1, X2=2,X3=3
            X2=2,X3=4
           X2=2,X3=5
           。。
    X1=1, X2=3,X3=4
           。。X1=2  X2=3 X3=4