算法练习^例题

[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 E
12 9 6 3 0 这种分布。 极端大的情况。
能不能少几分也出现呢? 比较平均的情况, 全打平。
A B C D E
4 4 4 4 4 这样没人出现啊, 不过每个人的分已经达到“最大值的最小值”极限了。那我得4分可以出现吗?不可以啊,
如果有2个人胜了,就不能出现了.
A B C D E
6 6 4 4 2
那得6分可以出现么?不能啊, 如果有3个人都胜了就不能出现了.
A B C D E
6 6 6 4(6) 1(0) ABC不能再从E里得分了, 所以干脆把1给D,让他多输给ABC吧。
6分呢??可以出现了么?
A B C D E
8 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
}

posted on 2011-02-03 10:57  oleeceo  阅读(185)  评论(0)    收藏  举报

导航