递归形式的问题 | 您所在的位置:网站首页 › 5个5加减乘除等于24不用括号 › 递归形式的问题 |
问题描述
算24
给出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 问题分析n个数算24,必有两个数要先算。这两个数算的结果,和剩余n-2个数,就构成了n-1个数求24的问题。 枚举先算的两个数,以及这两个数的运算方式。 边界条件:一个数算24 注意:浮点数比较是否相等,不能用 == C语言代码示例: #include #include double a[5]; #define EPS 1e-6 int isZero(double x) { return fabs(x) if(isZero(a[0] - 24)) return 1; else return 0; } for(i=0; i b[m] = a[i]/a[j]; if(count24(b, m+1)) return 1; } if( !isZero(a[i]) ){ b[m] = a[j]/a[i]; if( count24(b, m+1) ) return 1; } } return 0; } int main(){ int i; while(1) { for(i=0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |