我正在尝试解决各种递归难题,我遇到的一个问题是方程式生成器。我无法理解如何解决这个问题。问题陈述是这样的。
您将获得一个 4 位数字。例如,1234。现在,您必须通过在数字之间放置算术运算符和等号而不改变数字的顺序来制作一个等式。
- 1=2+3-4
- 1-2=3-4
- 12=3*4
- 12/3=4
- 1^2+3=4
我想编写一个函数来生成第一个方程,它可以在 C# 或 Java 中找到并返回它。任何人都可以提供有关如何递归解决此问题的线索或指针吗?
任何人都可以提供有关如何解决此问题的线索或指示吗?
是的。除了这里所有其他好的建议:阅读 Pólya 的“如何解决它”。这本书是关于如何解决数学问题的,但其中的许多建议都适用于编程问题。
http://en.wikipedia.org/wiki/How_to_Solve_It
Pólya 最适合您的问题的建议是解决一个更简单的问题。例如,你能解决这个问题吗?
您将获得一个 4 位数字。例如,1234。现在,您必须从中得出一个等式,方法是在数字之间放置一个等号而不改变数字的顺序。例如:
1=234
12=34
123=4
当然,所有这些方程都是错误的,但很明显,如果你不能解决生成没有运算符的虚假方程的问题,那么你就无法解决更难的生成带有运算符的真实方程的问题。解决更简单的问题,这将使您深入了解如何解决更大的问题。
将任务拆分为三个不同的子任务:
=
作为运算符)请参阅此生成组合。最后,在您还具有评估功能之后...
var results = GetCombinations().Where(comb => Evaluate(nums, comb)).ToList();
请注意,为了避免用勺子喂食,我故意简短。
提示:您可以:
生成字符串,然后尝试将它们解析为方程式并对其进行评估,以查看它们在语法上是否有效且“真实”,或者
生成和评估方程式树,评估它们,然后如果它们为“真”,则将它们解析为字符串。
任何一种方法都有挑战......但发现和解决它们是你的工作:-)
我以前的数学老师每天都和约会玩这个游戏。有趣的。
无论如何,关键是依次遍历每个可能的方程。(我知道这是一个递归问题,但请听我说)
像这样的东西:
递归函数(序列):
如果有效序列返回
foreach operator position
foreach operator
recursivefunction(sequence with new operator)
给你的一些提示: