pascal 判断24点有无解的问题,高人救我

来源:百度知道 编辑:UC知道 时间:2024/06/09 03:42:23
描述: superwyh是一个非常疯狂的24点爱好者,空闲时总是自己拿出扑克来算24点,24点的规则很简单,就是给你4张扑克(从1至13,用A代替1,J代替11,Q代替12,K代替13)通过加减乘除来求得24,各位oier帮了superwyh好多忙,为了报答大家superwyh就和大家做个24点的游戏,superwyh给大家4张牌大家告诉superwyh能不能凑成24就行。
[renqing PS:这道题很easy,是送分的题]

输入格式: 4张牌的牌面(1<=n<=13)。
输出格式: 如果能凑成输出"yes"反之输出"no"。
输入文件: 直接输入即可
输出文件: 直接输出即可 注意,不要在最后输出空行或空格!
样例输入: A 10 8 J
样例输出: no

...........累啊...555...................
var
a,r:array[1..4]of longint;
b:array[1..4]of boolean;
i:longint;
c:char;
t:boolean;
function f(x,y:real;a:longint):real;
begin
case a of
0:f:=x+y;
1:f:=x-y;
2:f:=x*y;
3:begin t:=false; if y>0 then begin t:=true;f:=x/y; end;end;
end;
end;
procedure pp;
var i,j,k:longint;
begin
for i:=0 to 3 do
for j:=0 to 3 do
for k:=0 to 3 do begin
if t and(f(f(f(a[1],a[2],i),a[3],j),a[4],k)=24) then begin writeln('yes');halt; end;
if t and(f(f(a[1],a[2],i),f(a[3],a[4],k),j)=24) then begin writeln('yes');halt; end;
if t and(f(f(a[1],f(a[2],a[3],j),i),a[4],k)=24) then begin writeln('yes');halt; end;
if t and(f(a[1],f(f(a[2],a[3],j),a[4],k),i)=24) then begin writeln('yes');halt; end;