已知:
总数Y
所求X的个数:m
已知X的值:X1  X2  X3  求:X1 X2 X3之和等于总数Y的组合方式:
【X1*a+X2*b+X3*c+……+XN*n=Y  (a、b、c为整数,a+b+c=m)】例子:
输入
总数:Y=889.23
所求X的个数:7
已知X的值:X1=124.53  X2=129.12  X3=128.28  输出:
上述举例所求结果的组合方式为
124.53*3+129.12*3+128.28*1=889.23

解决方案 »

  1.   


    procedure TForm1.Button6Click(Sender: TObject);
    var
      y : Currency;
      Count : Integer;
      X : array of Currency;
      i : array of Integer;  procedure _x(idx : Integer; c : Integer);
      var
        j : Integer;
        sum : Currency;
      begin
        if idx = High(i) then
        begin
          i[idx]  :=  c;
          sum := 0;
          for j := 0 to High(x) do
            sum := sum + x[j] * i[j];
          if sum = Y then
          begin
            for j := 0 to High(x) do
              mem.Lines.Add(CurrToStr(x[j]) + '*' + IntToStr(i[j]));
          end;
        end
        else begin
          for j := 0 to c do
          begin
            i[idx]  :=  j;
            _x(idx + 1, c - j);
          end;
        end;
      end;
    begin
      Y :=  889.23;  //已知和=889.23
      Count :=  7;  //已知X个数=7
      setlength(x, 3);  //已知X的值:X1=124.53  X2=129.12  X3=128.28
      x[0]  :=  124.53;
      x[1]  :=  129.12;
      x[2]  :=  128.28;  setlength(i, High(x) + 1);
      _x(0, Count);
    end;
      

  2.   

    已知X的数量是固定三个还是非固定的n个?abc是随着X的数量变化的还是也是固定的三个?
      

  3.   

    已知X的数量是不固定的,我计划以字符串的形式输入,中间以逗号隔开。如“124.53,129.12,128.28”。a+b+c的和等于我们所说的X的个数,这个也是不固定的。不知我说清楚了没有?
      

  4.   

    就是说可能X1,X2,X3,X4,X5.....然后有a,b,c,d,e......???
      

  5.   


    不清楚, 如果说
    所求X的个数:7                    <- 是不是还有X4,X5,X6,X7?
    已知X的值:X1=124.53  X2=129.12  X3=128.28  <- 这里没有其它?
      

  6.   

    嗯,不好意思,我换个说法吧。如所求的X的个数是7,这是凑成最后结果的所有的X的数量。但众多X中会有很多数字是重复的,如X1有三个,X2也有三个,X3有一个。结果是X1*3 + X2*3 + X3*1=Y。
      

  7.   

    ^_^
    这样说吧count(DISTINCT X) (不重复值的X数量是多少) 
      

  8.   

    呵呵,distinct X的值就是给出的三个值。发现人越来越老,表达能力越来越差了。
      

  9.   

    哦 那就是主要是 ABC的组合了组合完了进行循环验证是否能够使等式成立写代码,呵呵 写代码是下一步的事情