﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-becket-随笔分类-考智力</title><link>http://www.blogjava.net/ebecket/category/43678.html</link><description>一路风景我一路走着,不管多么疲惫,因为一路的风景很美.......
</description><language>zh-cn</language><lastBuildDate>Tue, 19 Jan 2010 18:42:26 GMT</lastBuildDate><pubDate>Tue, 19 Jan 2010 18:42:26 GMT</pubDate><ttl>60</ttl><item><title>分金条</title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310170.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:50:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310170.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310170.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310170.html</trackback:ping><description><![CDATA[A:你让某些人为你工作了七天，你要用一根金条作为报酬。这根金条要被分成七块。你必须在每天的活干完后交给他们一块。如果你只能将这根金条切割两次，你怎样给这些工人分？<br />
<br />
Q<br />
先把金条平均分为七份（不切割）<br />
<br />
第一次切割七分之一 第二次切割七分之二<br />
<br />
这样就分为三段 七分之一一段 七分之二一段 七分之四一段<br />
<br />
然后根据每天工作量交换就好了 <br />
<br />
<br />
<br />
<br />
<font size="3">切成1段,2段,和四段. <br />
1:给出1. <br />
2:给出2,还回1. <br />
3:给出1. <br />
4:给出4,还回3. <br />
5:给出1. <br />
6:给出2,还回1. <br />
7:给出1.</font><br />
<p>7 ＝ 1 ＋ 2 ＋ 4，分成三段，截2次，由上述&#8220;切成1段,2段,和四段&#8221;感觉1、2、4有一定的规律性，由此联想到了下面的递归等式<br />
2^n -1 = (2^n -1)/(2 &#8211; 1 ) = 1 + 2 + &#8230;. 2^(n-1) 》》》S(n) &#8211; 1 = 1 + 2 + &#8230; S(n-1)<br />
其中S(n) ＝ 2^n， S(0) ＝ 1<br />
等比数列求和的问题，即最后一项为前面所有项的和再加1<br />
这里的加1就相对于每天的工资，故每天给新的金条时要将前面的相应项和的对应金条取回。<br />
&nbsp;<br />
如果为15，则是截三次，分别为1 2 4 8，便可处理任意的整数了<br />
&nbsp;<br />
即以零换整的问题，钞票为什么设计成 1 2 5 10，估计是上述四个数可以以最小的张数组合任意的整数，哈哈，不会出现别人给你整票不能够找开的问题了。有兴趣的朋友可以用程序证明1 2 5 是最高效的方法，我猜是的，要不然为什么全世界都是这么设计的呢？<br />
&nbsp;<br />
反向推理：一根金条平均分成N段相连，每天的工资为一段，最少截成几段才能每天完工后付给工人当天的工资？<br />
2^(n-1) &#8211; 1 &lt; N =&lt; 2^n -1<br />
最小的n值必须满足上述不等式<br />
即（2^(n-1) &#8211; 1 ，2^n -1]半开半闭区间内的N值都至少分成n段才能解决当天完毕付工资问题<br />
利用上述不等式，即可针对任意的N值快速算出分段次数了，不管面试者如何改动N值，都是易如反掌了，以一敌百，轻松搞定</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/TanXiangHao/archive/2008/10/14/3072905.aspx</p>
<img src ="http://www.blogjava.net/ebecket/aggbug/310170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:50 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>