笔试题目
2012-11-02 09:54
225 查看
1.强盗分金
5个海盗抢到了100颗宝石,每100颗宝石大小相同且价值连城,他们决定这么分:
(1)抽签决定自己的号码(1、2、3、4、5)。
(2)首先,由1号提出分配方案,然后大家5人进行表决,当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼。
(3)1号死后,再由2号提出分配方案,然后大家4人进行表决,当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
(4)依此类推。
条件:每个海盗都是很聪明的人,都能够非常理智地判断得失,从而做出选择。并有以下的判断原则:
A:尽量保命。
B:尽量多得宝石。
C:尽量多杀人。
问题:最后的分配结果如何?
1.所涉及的知识点
递推法
分析法
2.分析问题
可用递推法来解决本题,由已知条件层层向下分析,要确保每一步都能准确无误。可能会有几个分支,应本着先易后难的原则,先从简单的分支入手。
如果从五个强盗开始考虑,非常不好入手,可以先考虑简单的情况,即海盗人数较少的情况,然后逐步复杂化,但是原理和简单情况还是相同的。
(1)当仅有二个海盗时,那么无论一号提出什么方案,二号都反对,那么一号肯定喂鱼,二号拿到所有的珠宝。
(2)当有三个海盗时,二号海盗肯定不希望一号海盗死,否则他就成了(1)中的一号。那么这里的一号就会想拿走所有的珠宝,因为他知道二号肯定支持他,因为如果二号反对,那么三号肯定也反对,一号喂鱼的话,那么二号也肯定喂鱼。所以一号拿走所有的珠宝。
(3)当有四个海盗时,一号必须要有三票赞成,而二号海盗肯定是反对的,因为当前的一号死后,他就成了(2)中的一号,所以当前的一号必须给三号海盗和四号海盗一个宝石,所以分配方案为一号98个,二号没有,三号四号各一个。在此不要忘记海盗判断原则C。
(4)当有五个海盗时,那么一号必须要有三票赞成,而根据(3)可知二号肯定反对他,因为他死了二号便成了(3)中的一号,可以拿98个宝石,所以不给二号。可以给三号1个宝石,三号便会支持他,否则三号将成为(3)中的二号,得不到宝石。给四号或五号中的一个两颗宝石,让他多于(3)中所得到的宝石数,另外一个不给,即可获得一个支持者。
3.答案
所以最后的方案为:
1号:97
2号:0
3号:1
4号:0
5号:2
或者:四号:2,五号:0
实现递推的方法的原则,就是由简单到复杂,逐步地深入分析,但是基本的原理却和简单情况非常相似。
2.扑克牌分堆
自己蒙上眼睛,之后有24张扑克,有8张正面朝上,分成2堆,正面朝上的一样,怎么分
3.写一个程序判断一个数是否是某个自然数的平方?
4.判断一个链表中是否有环
设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多走一步,最终两个指针会相遇,(注意:这里快指针不会跳过慢指针而不相遇,因为它每次都只比慢指针多走一个单位)
{
if(head == NULL)
{
return false;//没有环
}
list *pFast = head;
list *pSlow = head;
while(pFast->next != NULL && pFast->next->next != NULL)
{
pFast = pFast->next->next;
pSlow = pSlow->next;
if(pFast == pSlow)
{
return true;
}
}
return false;
5个海盗抢到了100颗宝石,每100颗宝石大小相同且价值连城,他们决定这么分:
(1)抽签决定自己的号码(1、2、3、4、5)。
(2)首先,由1号提出分配方案,然后大家5人进行表决,当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼。
(3)1号死后,再由2号提出分配方案,然后大家4人进行表决,当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
(4)依此类推。
条件:每个海盗都是很聪明的人,都能够非常理智地判断得失,从而做出选择。并有以下的判断原则:
A:尽量保命。
B:尽量多得宝石。
C:尽量多杀人。
问题:最后的分配结果如何?
1.所涉及的知识点
递推法
分析法
2.分析问题
可用递推法来解决本题,由已知条件层层向下分析,要确保每一步都能准确无误。可能会有几个分支,应本着先易后难的原则,先从简单的分支入手。
如果从五个强盗开始考虑,非常不好入手,可以先考虑简单的情况,即海盗人数较少的情况,然后逐步复杂化,但是原理和简单情况还是相同的。
(1)当仅有二个海盗时,那么无论一号提出什么方案,二号都反对,那么一号肯定喂鱼,二号拿到所有的珠宝。
(2)当有三个海盗时,二号海盗肯定不希望一号海盗死,否则他就成了(1)中的一号。那么这里的一号就会想拿走所有的珠宝,因为他知道二号肯定支持他,因为如果二号反对,那么三号肯定也反对,一号喂鱼的话,那么二号也肯定喂鱼。所以一号拿走所有的珠宝。
(3)当有四个海盗时,一号必须要有三票赞成,而二号海盗肯定是反对的,因为当前的一号死后,他就成了(2)中的一号,所以当前的一号必须给三号海盗和四号海盗一个宝石,所以分配方案为一号98个,二号没有,三号四号各一个。在此不要忘记海盗判断原则C。
(4)当有五个海盗时,那么一号必须要有三票赞成,而根据(3)可知二号肯定反对他,因为他死了二号便成了(3)中的一号,可以拿98个宝石,所以不给二号。可以给三号1个宝石,三号便会支持他,否则三号将成为(3)中的二号,得不到宝石。给四号或五号中的一个两颗宝石,让他多于(3)中所得到的宝石数,另外一个不给,即可获得一个支持者。
3.答案
所以最后的方案为:
1号:97
2号:0
3号:1
4号:0
5号:2
或者:四号:2,五号:0
实现递推的方法的原则,就是由简单到复杂,逐步地深入分析,但是基本的原理却和简单情况非常相似。
2.扑克牌分堆
自己蒙上眼睛,之后有24张扑克,有8张正面朝上,分成2堆,正面朝上的一样,怎么分
3.写一个程序判断一个数是否是某个自然数的平方?
4.判断一个链表中是否有环
设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多走一步,最终两个指针会相遇,(注意:这里快指针不会跳过慢指针而不相遇,因为它每次都只比慢指针多走一个单位)
{
if(head == NULL)
{
return false;//没有环
}
list *pFast = head;
list *pSlow = head;
while(pFast->next != NULL && pFast->next->next != NULL)
{
pFast = pFast->next->next;
pSlow = pSlow->next;
if(pFast == pSlow)
{
return true;
}
}
return false;
相关文章推荐
- 面试笔试题目
- 咪咕笔试题目:统计键盘写入一个字符串的按键点击次数
- C语言的笔试面试题(题目)
- 百度电子科技大学笔试题目
- js坑爹笔试题目汇总(持续更新中)
- C/C++ 笔试、面试题目大汇总2
- 2011年NOKIA的笔试题目
- 笔试题目总结之四——各种排序算法
- 收录各种猥琐的Java笔试/面试题目
- Android笔试和面试常见题目(一)
- 广东移动2014校招技术笔试题目
- 绝对有用腾讯笔试题目及答案
- 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
- 部分游戏公司策划职业笔试题目一览
- yahoo中国 最近的笔试题目之 cpp二则。
- 2012九月3号阿里巴巴笔试题目
- 笔试题目
- 笔试题目“检测IPv4地址”的实现
- 2014年秋季 阿里巴巴 校园招聘笔试题目(北京)
- 概率小数2013年阿里巴巴暑期实习招聘笔试题目(不完整,笔试时间:2013.5.5)