“暴力”也能解决问题!(算法设计第一期)

Mark

<p>最近,在群里面看到这样一道有意思的题,内容如下:</p> <p>看完这道题,大家可能都会“不自觉”地从1开始(即假设筐里只有一个鸡蛋)一个一个往后试,于是就有了如下图所示的一些答案:</p> <p>在验证以上答案都不对后,我渐渐被这道题吸引,我发现在鸡蛋总数无法知晓的情况下,取鸡蛋的次数也是无法知晓的,而题目中就给了剩余鸡蛋的数量,所以这道题用传统的数学思维来解题还是比较难的,于是我使用算法中的“暴力法”写了一个编程,具体如下:</p> <p>我们可以看到程序输出结果,一共441个蛋,接下来验证一下这个答案对不对:</p> <p>通过验证我们可以看到这个答案是对的,那么这个“暴力法”是怎么得到答案的呢?首先我们来看一下有关“暴力法”的定义:</p> <p>相信大家看完这段话后肯定还云里雾里的,那我接下来结合这道题解释一下“暴力法”求解过程:设鸡蛋总数为i,我们不妨让i从0开始取值(虽然i不可能是0),如果i满足i%2==1&amp;&amp;i%3==0&amp;&amp;i%4==1&amp;&amp;i%5==1&amp;&amp;</p><p>i%6==3&amp;&amp;i%7==0&amp;&amp;i%8==1&amp;&amp;i%9==0,我们就输出i的值,否则就不停地让i加1,直到i满足条件为止。上面那个条件语句我给大家解释一下:%是求余符号,用来求余数的,例如5%2等于1,而&amp;&amp;这个符号是“与”的意思,也就是i必须满足“除2余1并且除3余0并且除4余1并且除5余1并且除6余3并且除7余0并且除8余1并且除9余0”这8个条件,如果其中有一个条件不满足都无法得到i的值。于是i便从0开始取值,0除2的余数不等于1,所以让i加1,此时i=1,1除2余1,但是1除3的余数不等于0,再让i加1……于是i经历了0,1,2,3,4…440,441最后得到了答案。</p><p>看到这里大家可能对“暴力法”有了一定的认知,没错,就和我们刚拿到题时,大脑从0开始一个数一个数地往后试一样,只不过我们让这个过程从大脑“移”到了计算机上,让计算机一个数一个数地替我们去试,不负众望,计算机耗时0.1秒就得出了答案!现在想一下,你还有耐心或者毅力用大脑从0尝试到441吗?</p> <p>未完待续…</p>