一起来写一个24点的游戏程序

作者在 2006-08-08 17:56:00 发布以下内容
如果你有兴趣, 可以与我一起来写这个程序。

这个帖子发了很长时间了,一直没有给大家完整有效的代码。

前天打工回来,觉得有些无聊,想起这个程序,上手写,用的是穷举的方法,写了两个小时,一气呵成。这个程序也用到以前写的那个计算器的程序。

源代码以及可执行程序请点击:
UploadFiles/2007-4/46108099.rar
programming | 阅读 2668 次
文章评论,共5条
kai(作者)
2006-08-09 01:22
1
语言只是工具。 用什么都可以的。 这次就用C++ 吧。 

从何着手? 当然是从确定算法着手啦。 你们先说说你们的想法。
kai(作者)
2006-08-31 04:35
2
关于用什么语言的问题其实是无所谓的, 我认为语言只是一个说话的工具, 而编程语言就是表达算法的工具而已。所以关键的是对算法的阐述, 也就是说在逻辑层面找到答案。如果你能够在逻辑层面给出答案,那么余下来的只是一个编程语言的表述而已了。 现今的编程语言有很多, 但是大家有没有想过, 为什么C/C++, java 成了主流语言, 而不是Lisp, 而不是Scheme 呢? 这是自然的选择, 因为C/C++, java 提供了一种自由的机制, 也就是让语言成为表述思维的工具,而无需限制你的思维的模式。这一点是很重要的。 如果你学过Lisp 或者 Scheme 你会发现这种函数模式的语言对你的思维限制住了, 你必须在Lisp 模式下思维, 这一点是我反对的. 但是 functional programming 是一个很经典的模式, 如果掌握它, 那么你的power 会增长很多.  我刚才说了C++ 提供了自由的机制, 这意味着你同样可以在C++ 编程中 使用 functional programming.  在我的那个计算器的程序中就用到了 functional programming. 

在这个程序中同样也会用到. 下面是我对这个程序的思考. 算法很简单. 24 点是用4个数来寻找答案为24 的可能. 我举一个具体的例子. 比如 1 2 3 4 如何来得出24 呢? 随意从这4 个数中取出一个数, 比如1, 现在你可以这样思考,  1 和什么数的计算会得出24 呢? 有4种可能,  1 * 24 ,  1/ (1/24),  1 + 23, 1 - (-23),  对于第一种可能, 问题转换为 2 3 4 三个数如何得出24,  对于第二种可能, 问题转换为 2 3 4 三个数如何得出 1/24,  对于第三种可能, 问题转换为 2 3 4 三个数如何得出 23, 对于第四种可能, 问题转换为 2 3 4 三个数如何得出 -23. 你看到了, 问题本来是4个数找24,  现在问题转换为3个数找某一个数了. 同样的这样的思考可以继续下去, 直到你找到2个数找某一个数的可能.  如果你找到了2个数得出某个数的可能, 那么你可以回推上去, 从而得出 4 个数找24 点的可能.
kai(作者)
2006-09-01 00:41
3
还是来说这个程序的算法,  如果我们有一个算法可以得出4个数的运算值为24, 我暂时称这个算法为 f,  这4 个数为 a, b, c, d.  现在完全是抽象的来讨论这个问题了. 那么我可以这样在数学层面表达这个问题  f(a, b, c, d) =  24  请注意, 我这里先假定通过这个算法 f, 可以找到得出24 的表达式.  那么这个表达式可以进一步写成 16 种可能扩展: a + f(b, c, d) = 24; a - f(b, c, d) = 24; a * f(b, c, d) = 24; a / f(b, c, d) = 24; 以及 b + f(a, c, d) = 24; b - f(a, c, d) = 24; 等等... 我拿第一种扩展展开讨论 a + f(b, c, d) = 24  => f(b, c, d) = 24 - a;  由于a 是已知的, 那么 24 - a 就是确定的. 那么进一步 f(b, c, d) 可以用同样的方法进行讨论. 到这里可以看到了, 对于这个问题的解决, 如果懂得functional programming, 那么解法已经一目了然了, 而且程序会比较简短的.  办法就是写出这个 f 函数的递归通式. 所以说, 这个问题可以扩展为 n 个数求 某个值的可能. 不过需要指出的是, 考虑到 n 个数的个数级别, 如果个数比较多, 采用递归就不是好的方法了, 但是对于 4 个数的求解却是最恰当的方法.  需要说的是, 递归有内存开销大的缺点.
Tiger5392
2006-09-01 16:38
4
参考Tiger5392的博客,用VFP做的。
kai(作者)
2006-09-07 06:27
5
int f(int * pd, int n, int p, int q , vector & solution)

由于吃代码, 请注意vector 后面有一个尖括号, 然后是 string, 然受再是尖括号。
游客请输入验证码

kai
浏览94991次