这种题如何编程解决?

2014-08-16 19:03:57 +08:00
 lcj2class
题目要求是这样的:
假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。如何只用这2个水壶从池塘里取得3升的水**(最后,这三升水,在其中一个壶里)


我这里尝试进行了总结,
http://liujiacai.net/blog/2014/08/16/two-pot-question/

大家谁还有这种题目,可以分享出来,我觉得这种题很能锻炼思维,谢谢。
4732 次点击
所在节点    程序员
34 条回复
pljhonglu
2014-08-16 21:55:11 +08:00
见到校友~赞一个~
yangff
2014-08-16 21:57:00 +08:00
@lcj2class 你这样考虑,最开始的时候两个桶都是空的显然是可以的为1,
每个时刻有4种操作可以做,把某个桶装满,把一个桶的水倒进另一个桶。
直接搜索的话当然可以,但是你会发现,如果你已经知道ij这个状态的结果,就不用再去计算了,用数组记一下某个状态是否到达过就可以了,最后可以发现这个转移的过程其实就是在mod x意义下做扩展欧几里德。
lcj2class
2014-08-16 22:25:04 +08:00
@yangff 我大概知道你的意思了,那这个数组应该怎么构造呢?
asmore
2014-08-16 22:31:55 +08:00
算法表述非常清晰~~
bengol
2014-08-16 22:47:05 +08:00
@jok3r hackerrank 出过
yhf
2014-08-16 23:06:34 +08:00
acm里一般都会有这种题吧,描述题。
yangff
2014-08-16 23:39:56 +08:00
@lcj2class 搜索的时候记录一下当前的ij是否被算过,如果算过了就直接return这样最后得到的就是这个数组了。。
yangff
2014-08-16 23:42:27 +08:00
http://codeforces.com/problemset/problem/343/A
这题和你这题做法差不多。。
heganj
2014-08-17 00:09:49 +08:00
core.logic
bombless
2014-08-17 00:15:09 +08:00
也许可以参考一下张景中的书…他研究的一个方向就是用程序证明几何命题。
monkeylyf
2014-08-17 00:46:34 +08:00
gcd
lcj2class
2014-08-17 10:06:57 +08:00
@yangff 你这不就是动态规划嘛,不过lisp中一般都是直接用递归或迭代解决问题的,怎么保存中间状态我还不清楚
yangff
2014-08-17 10:13:40 +08:00
@lcj2class 囧我写的就是dp啊
tushiner
2014-08-17 14:35:50 +08:00
弱弱的说,ACM里面不是有很多这种东东么。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX