📄 unit1.pas
字号:
{
某份技巧集看到的算法,我随便写了写,
我不是作者但是我有不知道谁是作者,
所以写完收工。
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function SearchExpression(mNumbers: array of Integer;
mDest: Integer): string;
const
cPrecision = 1E-6;
var
vNumbers: array of Extended;
vExpressions: array of string;
vLength: Integer;
function fSearchExpression(mLevel: Integer): Boolean;
var
I, J: Integer;
A, B: Extended;
vExpA, vExpB: string;
begin
Result := True;
if (mLevel <= 1) and (Abs(vNumbers[0] - mDest) <= cPrecision) then Exit;
for I := 0 to mLevel - 1 do begin
for J := I + 1 to mLevel - 1 do begin
A := vNumbers[I];
B := vNumbers[J];
vNumbers[J] := vNumbers[mLevel - 1];
vExpA := vExpressions[I];
vExpB := vExpressions[J];
vExpressions[J] := vExpressions[mLevel - 1];
vExpressions[I] := '(' + vExpA + '+' + vExpB + ')';
vNumbers[I] := A + B;
if fSearchExpression(mLevel - 1) then Exit;
vExpressions[I] := '(' + vExpA + '-' + vExpB + ')';
vNumbers[I] := A - B;
if fSearchExpression(mLevel - 1) then Exit;
vExpressions[I] := '(' + vExpB + '-' + vExpA + ')';
vNumbers[I] := B - A;
if fSearchExpression(mLevel - 1) then Exit;
vExpressions[I] := '(' + vExpA + '*' + vExpB + ')';
vNumbers[I] := A * B;
if fSearchExpression(mLevel - 1) then Exit;
if B <> 0 then begin
vExpressions[I] := '(' + vExpA + '/' + vExpB + ')';
vNumbers[I] := A / B;
if fSearchExpression(mLevel - 1) then Exit;
end;
if A <> 0 then begin
vExpressions[I] := '(' + vExpB + '/' + vExpA + ')';
vNumbers[I] := B / A;
if fSearchExpression(mLevel - 1) then Exit;
end;
vNumbers[I] := A;
vNumbers[J] := B;
vExpressions[I] := vExpA;
vExpressions[J] := vExpB;
end;
end;
Result := False;
end;
var
I: Integer;
begin
vLength := Length(mNumbers);
SetLength(vNumbers, vLength);
SetLength(vExpressions, vLength);
for I := 0 to vLength - 1 do begin
vNumbers[I] := mNumbers[I];
vExpressions[I] := IntToStr(mNumbers[I]);
end;
if fSearchExpression(vLength) then
Result := vExpressions[0]
else Result := '';
vNumbers := nil;
vExpressions := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := SearchExpression([5, 5, 5, 1], 24);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -