(Hab es nicht ausgiebig getestet
)
Es gibt insgesamt 512 Möglichkeiten (also 9 Bits)
Im "Edit1" stehen die 10 Ziffern (direkt hintereinander)
Im "Edit2" steht das zu suchende Ergebnis
"Button1" startet den Vorgang und die
"ListBox1" gibt das ganze aus
Delphi-Quellcode:
function GetBitStatus(W:Integer):String;
var BS : String;
begin
BS:='';
If W-256 >= 0 then begin BS:=BS+'1'; W:=W-256; end else BS:=BS+'0';
If W-128 >= 0 then begin BS:=BS+'1'; W:=W-128; end else BS:=BS+'0';
If W-64 >= 0 then begin BS:=BS+'1'; W:=W-64; end else BS:=BS+'0';
If W-32 >= 0 then begin BS:=BS+'1'; W:=W-32; end else BS:=BS+'0';
If W-16 >= 0 then begin BS:=BS+'1'; W:=W-16; end else BS:=BS+'0';
If W-8 >= 0 then begin BS:=BS+'1'; W:=W-8; end else BS:=BS+'0';
If W-4 >= 0 then begin BS:=BS+'1'; W:=W-4; end else BS:=BS+'0';
If W-2 >= 0 then begin BS:=BS+'1'; W:=W-2; end else BS:=BS+'0';
If W-1 >= 0 then begin BS:=BS+'1'; W:=W-1; end else BS:=BS+'0';
Result:=BS;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i,i1 : Integer;
A : Array[1..10] of Integer;
W : Integer;
S, S1 : String;
begin
ListBox1.Clear;
For i:=1 to 10 do A[i]:=StrToInt(Edit1.Text[i]);
For i:=0 to 511 do
begin
W:=A[1];
For i1:=2 to 10 do
begin
S:=GetBitStatus(i); If S[i1-1]='0' then W:=W-A[i1]
else W:=W+A[i1];
end;
If StrToInt(Edit2.Text)=W then
begin
S1:=Edit1.Text[1];
For i1:=1 to 9 do If S[i1]='0' then S1:=S1+'-'+Edit1.Text[i1+1]
else S1:=S1+'+'+Edit1.Text[i1+1];
ListBox1.Items.Add(S1+'='+Edit2.Text);
end;
end;
end;