• OpenJudge


    2787:算24

    时间限制:
    3000ms
    内存限制:
    65536kB
    描述
    给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。

    这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。

    比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
    输入
    输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
    输出
    对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
    样例输入
    5 5 5 1
    1 1 4 2
    0 0 0 0
    
    样例输出
    YES
    NO
    

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cmath>
     4 using namespace std;
     5 const double x = 1e-6;
     6 
     7 double a[5];
     8 
     9 bool dfs(int step)
    10 {
    11     int i,j,k,t;
    12     if(step == 1)
    13     {
    14         if(fabs(a[0]-24)< x)
    15             return 1;
    16         else
    17             return 0;
    18     }
    19     else
    20     {
    21         double m,n;
    22         for(i=0;i<step;i++)
    23             for(j=i+1;j<step;j++)
    24             {
    25                 m = a[i],n = a[j];
    26                 a[j] = a[step - 1]; 
    27                 for(k=1;k<=6;k++)
    28                 {
    29                    // m = a[i],n = a[j];
    30                    // a[j] = a[step - 1]; 
    31                     switch (k)
    32                     {
    33                         case 1:a[i] = m+n;
    34                         if(dfs(step-1)) return 1;
    35                         break;
    36                         case 2:a[i] = m-n;
    37                         if(dfs(step-1)) return 1;
    38                         break;
    39                         case 3:a[i] = n-m;
    40                         if(dfs(step-1)) return 1;
    41                         break;
    42                         case 4:a[i] = m*n;
    43                         if(dfs(step-1)) return 1;
    44                         break;
    45                         case 5:
    46                             if(fabs(n)>=x)
    47                             {   
    48                                 a[i] = m/n;
    49                                 if(dfs(step-1)) return 1;
    50                                 break;
    51                             }
    52                         case 6:
    53                             if(fabs(m)>=x)
    54                             {   
    55                                 a[i] = n/m;
    56                                 if(dfs(step-1)) return 1;
    57                                 break;
    58                             }
    59                     }
    60                 }
    61                 a[i] = m,a[j] = n;
    62             }
    63         }
    64         return 0;//忘啦 
    65 }
    66             
    67 int main()
    68 {
    69     int i,j,k,t;
    70     while(1)
    71     {
    72         memset(a,0,sizeof(a));
    73         double sum = 0;
    74         for(i=0;i<4;i++)
    75         {
    76             cin>>a[i];
    77             sum += a[i];
    78         }
    79         bool flag ;
    80         if(0==sum)
    81             break;
    82         else 
    83             flag = dfs(4);
    84         if(flag)
    85             cout<<"YES"<<endl;
    86         else
    87             cout<<"NO"<<endl;
    88     }
    89     return 0;
    90 }
  • 相关阅读:
    appfabric cache配置,实验记录
    appfabric cache存储ef 查询结果的bug
    CruiseControl.NET svn获取 自动编译 ftp上传
    @Ajax.RenderAction 把局部页改为ajax加载
    分布式架构下的mvc 异步controller ajax comet 长连接
    win7重装iis,搞死
    验证码识别的基本思路及方法
    C# 获取程序当前文件夹
    在c#中 限制文本框只能输入数字
    string字符串 获取指定位置范围的子字符串
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2653067.html
Copyright © 2020-2023  润新知