题目描述
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 2 3 4
样例输出
yes
题目分析: 本题renqing说很easy,莫并没有发现多easy,也许是我的底子太差了。
本题直接搜索不进行剪枝也可以轻松通过
代码

代码program P74;
type ar=array[0..5]of real;
var
i,j,k:integer;
a:ar;
ch:char;
procedure search(l1,l2:integer;a:ar);
var i,j,k,m,n,t:integer;
b:array[0..5]of real;
begin
fillchar(b,sizeof(b),0);
if (l1=l2)and(abs(a[l1]-24)<0.0001)then
begin
writeln('yes');
halt;
end;
for i:=l1 to l2 do
for j:=l1 to l2 do
if i<>j then
begin
t:=0;
for k:=l1 to l2 do
if (k<>i)and(k<>j) then
begin
inc(t);
b[t]:=a[k];
end;
inc(t);
b[t]:=a[i]+a[j];
search(1,t,b);
b[t]:=a[i]-a[j];
search(1,t,b);
b[t]:=a[i]*a[j];
search(1,t,b);
if a[j]<>0 then
b[t]:=a[i]/a[j];
search(1,t,b);
end;
end;
begin
for i:=1 to 4 do
begin
read(ch);
if ord(ch)<60 then
a[i]:=ord(ch)-48;
if ch='A' then a[i]:=1;
if ch='J' then a[i]:=11;
if ch='Q' then a[i]:=12;
if ch='k' then a[i]:=13;
if i<>4 then
read(ch);
end;
search(1,4,a);
writeln('no');
end.