本文主要是介绍关于2进制思想的趣味题。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.有一条金条,一个人给一个老板打工7天,每天给那人金条的七分之一,把金条最少切几次才可按时将工资发放?2.现有1000个苹果,10个盒子,现在要你将1000个苹果装入10个盒子中,使得用户无论购买多少个苹果(1-1000),都能由若干个盒子拼装而成(卖的时候是整个盒子卖,不能拆盒子的包装)
怎么装??
3.有1000瓶液体,无色无味,外表完全一样,其中一瓶是毒药,有10条警犬,警犬喝过毒药后两小时后死亡。问,如何在两个小时后确定哪瓶是毒药。
4.如何仅使用4个砝码,称出40克以内(及40克)的重量的物体。
1、分析:
最少只需切割2下,分别切出1/7,2/7和4/7的三块。
因为要将金条切割成最少几份,来分别给工人的7天的工资按时发工资。所以可以将问题转化为:“选择最少几个数,可以表示1到7的7个数的问题”。
首先,第一天的工资,必须要切割出1/7块来发工资。
然后,第二天时候,有两种切法来发工资,一种是再切1/7,一种是切2/7通过交换第一天的1/7来实现发放工资的效果。此时,考虑使用第二种时,第三天无须进行切割,便可完成所有交换,达到最佳效果。Ps:若采用第一种,第三天是必须要进行切割。
通过第二种方法,第三天只需把1/7块支付即可。
第四天,使用4/7交换工人手中的1/7和2/7。
第五天,再给1/7。
第六天,使用2/7交换1/7。
第七天,给出1/7完成交付。
2、分析:
可以将1000个苹果以1,2,4,8,16,32,64,128,256,489。
1000个苹果分装在10个盒子里实现用户无论要买多少个,均可直接获取其中几个盒子达到目的。可以将其转化为“十个数的组合使其可以表示1000以内的任意一个数”。
可以发现1000约等于1024,而使用
00000 00001
00000 00010
00000 00100
00000 01000
00000 10000
00001 00000
00010 00000
00100 00000
01000 00000
10000 00000
的十个数的组合即可表示1023以内的任意数字。而由于只有1000个苹果,且只需表示1000以内的数字,所以最后一个数及取512 - 32 = 489个。这时前九个盒子可表示511以内任意一个数,和489组合,即可实现1000以内任意数字的表示。
3、分析:
因为要通过10只警犬,区分出1000瓶中的唯一一瓶毒药。
首先,假想10只警犬即十个二进制位,可以表示两个值,两种状态。则,可以演化出2^10 = 1024种状态。
然后,对1000瓶药水进行编号。
从00000 00001
00000 00011
.....
11111 01000
总共1000个编号。对警犬1喂最后一位为1的药水,对警犬2位倒数第二位为1的的药水.....对警犬十喂倒数第十位为1的药水。
此时根据警犬的状态,可判断药水是否有毒。
如:
当警犬1死,其余不死时,判断00000 00001有毒。
当警犬2死,其余不死时,判断00000 00010有毒。
总结:
即,几号警犬死亡,则对应位为1,其余位为0的标签药水有毒。
4、分析:
首先,根据二进制的思想,但使用1、2、4、8只能称出15以内质量的物体。再累似二进制思想。2克可以使用左边3克,右边1克的方法实现2克的重量称量。故1克、3克可实现4克以内的称量,下一个使用9克可实现14克以内的称量。再加一个27,即可实现40以内的所有质量的称量。
总结:这些题都是使用尽量少的数表示最多的数。在不能使用减法时,最优的解法是采用二进制的方式。如第二和第三题。
当可使用减法时,最优解为三进制方式,如第一题和第四题。
这篇关于关于2进制思想的趣味题。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!