已知:
总数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
总数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
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;
不清楚, 如果说
所求X的个数:7 <- 是不是还有X4,X5,X6,X7?
已知X的值:X1=124.53 X2=129.12 X3=128.28 <- 这里没有其它?
这样说吧count(DISTINCT X) (不重复值的X数量是多少)