博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

RQNOJ p74 24点(搜索)

Posted on 2010-11-01 09:41  桃子在路上  阅读(311)  评论(0)    收藏  举报

题目描述

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.