OpenJudge

简介: 2787:算24 查看 提交 统计 提问 时间限制:3000ms内存限制:65536kB描述给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。

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 }

 

目录
相关文章
OpenJudge NOI 1.11 05:派
OpenJudge NOI 1.11 05:派
81 0
|
人工智能 数据安全/隐私保护
openjudge 螺旋加密
/*======================================================================== 25:螺旋加密 总时间限制: 1000ms 内存限制: 65536kB 描述 Chip和Dale发明了一种文本信息加密技术。
1431 0
|
人工智能 定位技术 C语言
openjudge-最好的草
http://noi.openjudge.cn/ch0108/17/ 总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  65536kB 描述 奶牛Bessie计划好好享受柔软的春季新草。
1767 0
openjudge-膨胀的木棍
http://noi.openjudge.cn/ch0111/09/ 总时间限制: 1000ms  内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。
1175 0
|
人工智能 算法
OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 65536kB 描述 参考整数排序方法,设计一种为字符串排序的算法,将字符串从小到大输出 输入 第一行为测试数据组数t, 后面跟着t组数据。
816 0
|
人工智能
OpenJudge计算概论-寻找山顶
/*===================================== 寻找山顶 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方)。
866 0
|
ice
OpenJudge计算概论-文字排版
/*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65536kB 描述 给一段英文短文,单词之间以空格分隔(每个单词应包括其前后紧邻的标点符号)。
867 0
OpenJudge计算概论-求平均年龄
/*============================================== 求平均年龄 总时间限制: 1000ms 内存限制: 65536kB 描述 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
1392 0
OpenJudge计算概论-取石子游戏
OpenJudge计算概论-取石子游戏【函数递归练习】 /*====================================================================== 取石子游戏 总时间限制:  1000ms       内存限制: 65536kB 描述 有两堆石子,两个人轮流去取.
861 0
|
人工智能
OpenJudge计算概论-中位数
/*============================================================== 中位数 总时间限制: 2000ms 内存限制: 65536kB 描述 中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均...
957 0