快算24,谢谢! 任意给出0-9中的4个数,可重复,加减乘除算24,每数只能而且必须用一次。!就是以前小时候玩的游戏,请大家给点意见!或者给点原代码!谢谢![email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://xmsh.l78.bizcn.com/ahong/download/2436p.zip (*//标题:类似计算加减乘除二十四的算法说明:参考 http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=422修改:Zswang日期:2003-03-17支持:[email protected]//*)///////Begin Sourcefunction 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;///////End Source///////Begin Demoprocedure TForm1.Button1Click(Sender: TObject);begin Edit1.Text := SearchExpression([5, 5, 5, 1], 24);end;///////End Demo //伴水老兄修改的代码unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}///////Begin Sourcefunction 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;function t_t(s_s:string):string;var hint:integer;begin hint:=length(s_s); if (s_s[1]='(')and(s_s[hint]=')') then begin s_s:=copy(s_s,2,hint-2); t_t(s_s); end; result:=s_s;end;procedure TForm1.Button1Click(Sender: TObject);var s:string; t1,t2,t3,t4:integer;begin t1:=strtoint(edit1.text); t2:=strtoint(edit2.text); t3:=strtoint(edit3.text); t4:=strtoint(edit4.text); s:=SearchExpression([t1,t2,t3,t4], 24); if s='' then s:='提示:此次无解' else begin s:=t_t(s); s:=s+' =24'; memo1.lines.add('本次有解:'); memo1.lines.add(s); end;end;end. 合格率计算 在表單Form還沒顯示出來時取消? DELPHI的TAOTABLE赋值 哪里下载Delphi8(Delphi.Net)?谢谢 查询问题 帮忙啊!!!!!!分不够在加! 报表的Detail行本来是根据记录数自动伸缩的,我想固定其高度,应该怎样实现? 为什么动态建立一个Adoquery,运行出错!100分 数据库引擎错误(BDE) 入门delphi从delph几开始? 有没有能将打印内容截取为图片或其他格式能直接查看打印效果的软件? 简单问题!!! 32位程序调用16位的DLL和反过来
标题:类似计算加减乘除二十四的算法
说明:参考 http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=422
修改:Zswang
日期:2003-03-17
支持:[email protected]
//*)///////Begin Source
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;
///////End Source///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := SearchExpression([5, 5, 5, 1], 24);
end;
///////End Demo
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}///////Begin Source
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;
function t_t(s_s:string):string;
var hint:integer;
begin
hint:=length(s_s);
if (s_s[1]='(')and(s_s[hint]=')') then
begin
s_s:=copy(s_s,2,hint-2);
t_t(s_s);
end;
result:=s_s;
end;
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
t1,t2,t3,t4:integer;
begin
t1:=strtoint(edit1.text);
t2:=strtoint(edit2.text);
t3:=strtoint(edit3.text);
t4:=strtoint(edit4.text);
s:=SearchExpression([t1,t2,t3,t4], 24);
if s='' then s:='提示:此次无解'
else
begin
s:=t_t(s);
s:=s+' =24';
memo1.lines.add('本次有解:');
memo1.lines.add(s);
end;
end;end.