# 计算24点

opd:array[1..10]of real; top:integer; begin top:=0; i:=1;szhong:=''; while i<=length(s) do begin{从左到右分析逆波兰式} if s[i] in ['a'..'d'] then begin{如果遇到字母} top:=top+1;{进栈} opd[top]:=bianliang[s[i]]; end else begin{如果遇到运算符号} if top>=2 then begin{如果逆波兰式合法} opd[top-1]:=jisuan(opd[top-1],opd[top],s[i]); {弹出栈顶两元素计算，结果进栈} top:=top-1; end else begin nibolan:=-1;{不合法标志} exit; end; end; i:=i+1; end; nibolan:=opd[1]; end; procedure zhongzhui(var s:biaodatype); {求中缀表达式 } type node=record s:biaodatype; ch:char; end; var stack:array[1..7]of char; i,top:integer; s1,s2:node; stab:array['e'..'z'] of node;{记录计算过程的字符串} count:char; begin top:=0;count:='d'; fillchar(stack,sizeof(stack),0); fillchar(stab,sizeof(stab),0); i:=1; while i<=length(s) do begin{从左到右分析字符串，类似计算值} if s[i] in zimu then begin

top:=top+1; stack[top]:=s[i]; end else begin if stack[top-1] in zimu then s1.s:=stack[top-1] else begin s1:=stab[stack[top-1]]; if (s1.ch in['+','-'])and(s[i] in ['*','/']) then s1.s:='('+s1.s+')'; end; if stack[top] in zimu then s2.s:=stack[top] else begin s2:=stab[stack[top]]; if (s[i]='/')or((s[i]='*')and(s2.ch in['+','-'])) or((s[i]='-')and(s2.ch in ['+','-'])) then s2.s:='('+s2.s+')';{如果需要，则加括号} end; inc(count); stab[count].ch:=s[i]; stab[count].s:=s1.s+s[i]+s2.s; top:=top-1; stack[top]:=count; end; i:=i+1; end; s:=stab[count].s; end; procedure pailie(step:integer);{枚举字符所有可能的排列} var zhi:real; i,j,count:integer; begin for i:=1 to 8 do begin if ((fuhao[i]in zimu)and(used[i]=false))or(not (fuhao[i]in zimu)) then begin {字母不可以重复，运算符可以重复} zifu[step]:=fuhao[i]; used[i]:=true; if step>=7 then begin{如果完成一个逆波兰式的产生} count:=0; for j:=1 to 7 do if zifu[j] in ['a'..'d'] then count:=count+1;

if (count>=4)and(zifu[1]in['a'..'d'])and (zifu[2]in['a'..'d'])and(zifu[7]in['+','-','*','/']) then begin {筛选条件： 如果逆波兰式中字母不少于 4 个， 并且字符的第 1、 2 位都是字母， 并且字符的最后一位是运算符} s:=''; for j:=1 to 7 do if zifu[j] in ['a'..'z'] then s:=s+zifu[j]; if s='abcd' then begin{如果逆波兰式中的字母顺序符合‘abcd’} s:=''; for j:=1 to 7 do s:=s+zifu[j]; zhi:=nibolan(s);{求逆波兰式值值} if abs(zhi-24)<min then begin{如果等于 24} zhongzhui(s);{求中缀表示} for j:=1 to length(s) do begin if s[j]in zimu then write(bianliang[s[j]]:0:0) else write(s[j]); end; writeln; end; end; end; end else pailie(step+1); zifu[step]:='0';{回溯} used[i]:=false; end; end; end; begin init; s:=''; count:=0; pailie(1); close(output); end.

### 24点的计算方法

24点计算方法。好!3×(4+-6+10)=24 3×(-6+10+4)=24 3×(10+-6+4)=24 (4+-6+10)×3=24 4-10÷ (3÷-6)=24 (-6+4+10)×3=24 ...

### 24点算法大全

24 点” 算法技巧一、游戏内容及规则 一牌中 1～9 这 36 张牌任意抽取 4 张牌,用加、减、乘、除(可加括号) 把牌面上的数成 24。每张牌必须用...

### 数学算24点题目

24点游戏 | 算24点 | 计算24点算法 | 24点 | 计算24点编程 | 24点闯关 | 计算24游戏 | 24点题目大全三年级 |