在上一个动态写出算24点的函数后,这里给出整个程序并且对程序内容进行分析:
代码解析:
-
定义常量
EPS
:用于浮点数的比较,以避免直接比较可能引起的精度问题。 -
定义一个iszero
函数:- 判断一个浮点数是否接近于0,如果是,则返回
true
。
- 判断一个浮点数是否接近于0,如果是,则返回
-
suan24
函数:- 递归函数,尝试通过组合四个数字和四种运算得到24。
- 如果只剩下一个数字,且该数字接近24,则返回
true
。 - 通过双层循环遍历所有可能的数字对,尝试加、减、乘、除四种运算。
- 对每种运算结果,递归调用
suan24
函数,检查是否能得到24。 - 如果任何一种运算能得到24,则返回
true
。
-
main
函数:- 无限循环,直到输入的四个数字之和为0时退出。
- 读取四个数字,并计算它们的和。
- 调用
suan24
函数,检查是否有可能通过这四个数字得到24。 - 根据
suan24
的返回值,输出“YES”或“NO”。
下面展示几组运行实例:
代码的优缺点的分析:
-
优点:
- 使用递归方法尝试所有可能的运算组合,是一种常见的解决问题的方法。
- 考虑了浮点数比较的精度问题。
-
缺点:
- 没有处理除以0的情况,这可能会导致运行时错误。
- 没有考虑运算的顺序和括号的使用,这在24点游戏中是重要的。
- 输入的四个数字之和为0时退出循环可能不是一个好的退出条件,因为即使和不为0,也可能没有解决方案。