⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 Count24 一个算24的算法演示程序
💻 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 + -