黑马程序员技术交流社区

标题: 思维题 [打印本页]

作者: GKAirzzzzz    时间: 2017-2-18 22:11
标题: 思维题
5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。假定每个海盗都是绝顶聪明且很理智,那么第一个海盗提出怎样的分配方案才能够使自己的收益最大化?
作者: GKAirzzzzz    时间: 2017-2-19 12:58
这个题懒得贴答案了,就是倒着推算,具体感兴趣的可以百度~~
然后今天的问题,很简单,如何不借助第三个变量,交换两个变量的值~
作者: GKAirzzzzz    时间: 2017-2-21 09:35
本帖最后由 GKAirzzzzz 于 2017-2-22 20:32 编辑

F1:算数运算
x=x+y; //x暂存两数之和
y=x-y; //y为两数之和减去y,即原来的x
x=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y
这种方法存在整数溢出的可能
F2:异或
x^=y;//x先存x和y两者的信息
y^=x;//保持x不变,利用x异或反转y的原始值使其等于x的原始值
x^=y;//保持y不变,利用x异或反转y的原始值使其等于y的原始值
原文:http://blog.csdn.net/samjustin1/article/details/52138733
如果仔细思考,可以发现实际上有无数种方法。为什么需要第三个变量?从信息的角度来分析,两个变量必然存在两份信息(姑且以份为单位),如果直接交换,a=b,则a原来的信息丢失,所以引入一个临时变量来保存a的信息,以确保信息完整性。也就是说,temp的作用就是保存交换过程可能损失的信息量,那么只要这个信息量不损失,则无需temp.做编解码的人都知道,编码的是残差数据。残差数据包含的就是那额外的信息量。那么,完全可以在交换过程中传递额外信息,也就是a,b之间的耦合信息,则交换过程不会发生信息丢失,也就无需第三个变量。这耦合信息可以是a-b,也可以是a^b,还可以是a*b.如:
a=a*b;
b=a/b;
a=a/b;
同样可以完成交换(仅提供思路,未考虑除0溢出等问题)。举一反三,可以有无穷种方法,但原理都是一样的。
原文:http://blog.chinaunix.net/uid-17053077-id-1987964.html



作者: GKAirzzzzz    时间: 2017-2-25 15:18
今天总算记得找东西了。。然后拖更了好几天,先放两道题。
1. M张卡片的背面分别写有M个不同的数,每一次提问可任选三张不同的卡片,询问写在它们背面的三个不同的数组成的集合。问:最少可以通过多少次询问能了解每张卡片背面写的数是什么
2.由1到100的所有整数被写成一行a[sub]1[/sub],a[sub]2[/sub],....a[sub]100[/sub],但顺序未知。通过每个50个数的问题,可以弄清楚这50个数中各个数的大小顺序,问最少需问多少个这样的问题,才能确保弄清楚所有100个数?


作者: yourtear    时间: 2017-2-25 19:53
1111111111




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2