算法练习^例题
[2011.03.05] 从之前的信息可以看出,任何问题,都要先 走几步看看,总结一下,感觉一下,分析一下。
[2011.03.05] 1生门,1死门,1人只说真话,1人只说假话, 这俩人知道哪个是生门哪个是死门。 1句话,你怎么问出结果。需要包含的信息
问A,这是生门? 问B,这是生门? 单独问无法说明哪个是真。
问A,他是真(真话)人?B答不是。
问B,他是真(真话)人?B答不是。
1. 所以必须带有两个人的信息。
2. 必须包含门的信息,不然怎么知道哪个是生死?目前:至少你要问A,他会说你是真人么? 真人会说,不会。问B,他会说你是真人么? 假人会说,会。如何把门的信息加入?
[2011.02.28] 12硬币,只能拿1,2,4,如何必胜。 缩小问题规模 + 倒推 + 实践
假设我先拿到了8
赢a 8 2 8 1 8 11 赢点b 1 1 2 1 9 12 输点所以8是赢点, 谁拿到谁赢再假设我先拿到4, 看看到8有没有路输a 4 2(1)(4) 4 6 7输点b 1 1(2) 5赢点9也是输点。 所以4是死点。 不能拿4.那现在重新开始a 2 先拿2就能保证拿到赢点了。b 2
[2011.02.28] 足球比赛,胜3,平1,负0, 最少得多少分一定可以出现。 极端情况最大最小最平均 + 反问这样是否可以,是否有特殊情况会推翻当前情况。
多少分一定出现? 全赢了一定出现, 不可能有第2个全赢的了。 第2个人把剩下的全赢了一定出现,不可能有第3个全赢的了。A B C D E12 9 6 3 0 这种分布。 极端大的情况。能不能少几分也出现呢? 比较平均的情况, 全打平。A B C D E4 4 4 4 4 这样没人出现啊, 不过每个人的分已经达到“最大值的最小值”极限了。那我得4分可以出现吗?不可以啊,如果有2个人胜了,就不能出现了.A B C D E6 6 4 4 2那得6分可以出现么?不能啊, 如果有3个人都胜了就不能出现了.A B C D E6 6 6 4(6) 1(0) ABC不能再从E里得分了, 所以干脆把1给D,让他多输给ABC吧。6分呢??可以出现了么?A B C D E8 8 8 3 0 差不多了, 那万一3人都得8分呢?得加赛了, 必须有一个赢一场。接下来抽象下吧:平最多2个,胜所有其他的。(n-3)*3+2这个分数.
[2011.02.02] 把所有信息都印在脑袋里分析.
把走的过程的每一步都印在脑袋里分析, 不管是删除过程,修改过程,添加过程.
[2011.01.20] 位平方和集, 123= 1+4+9= 14, 14= 1+16= 17...求集合最早值.
用位寻找最大数, nx^2+nx+3<100, 找x最大数, 按位查找.
1. 一个数组中, 找错所有4个幂次方的数.
2. 一个不知长度链表, 找其中点.
3. 主元素问题
4. 嵌套箱问题
5. N对括号有多少种排序(例如4对): 模糊的方法匹配
6. 最长递增子序列问题 每个节点只记录1个信息。
1. 文件命名1-1-1.jpg
[2011.3.6] 找最大公约数的 MODGCD算法/
//pre_condition: a>b
while(!isZero(b))
{
int [] t = copy(b); // b->t
divide(a, b, quot, remainder); // quot = a/b 余remainder
assign(b, remainder); // b = remainder
assign(a, t) // a = t
}