【数学-算法】1加到100的有趣算法

今天备考软件设计师,遇到个公式1+2+3+..+n=n(n+1)/2,居然一时卡壳无法证明。

我们先看看令高斯闻名世界的小学数学题,1+2+3+...+98+99+100=?

 

算法1: 逐个累加。

算法2:逐对的首尾相加: (1+100)+(2+99)+(3+98)+...+(50+51) ,总共有 50对101,就是50*101=5050。

算法3:创造出一个相反的计算式 100+99+98+...+3+2+1,它与1+2+3+...+99+100的结果是相同的,两个式子一一对应相加,总共是100个101,就是100*101,然后再除2,就是100*101/2 = 5050。

 

这三个算法,显然第三个更直观更清晰。让我感到惊奇的是它的创造性,它没有直接去求解问题,而是创造性的提出一个新问题,然后利用这个多余的新问题与题目之间的独特关系,从而简化了原问题的求解。不得不说,真的不是一般没有受过数学训练的人能想到的。

我们再用算法2和3去推导公式:1+2+3+..+n=n(n+1)/2。

 

算法2:

n为偶数时,逐对进行首尾相加,刚好有n/2对,每对的和是n+1,二者相乘就是和:(n+1)n/2。

比如:1+2+3+4。

 

n为奇数时,这时有2种方法。

方法1:先累加前n-1,即先计算:1+2+3+..+n-1,套用偶数的公式,结果前n-1项的和是 n(n-1)/2,然后再加上n,就是 n+n(n-1)/2 = n(n+1)/2。

方法2:逐对进行首尾相加,会有(n-1)/2对,每对的和是n+1,但中间剩下个单项,是 (n+1)/2,两个部分加起来,就是:(n+1)(n-1)/2 + (n+1)/2 = (n+1)n/2。

比如:1+2+3+4+5。

 

算法3(清晰易懂):

要求1+2+3+...+(n-1)+n

构造n+(n-1)+...+3+2+1

二者上下对应相加,得到:

(n+1)+(n+1)+...+(n+1)+(n+1)+(n+1)

容易看出,是n个n+1相加,即 n*(n+1)

因构造的算式与要求的算式值相等,所以刚才的结果除2,即 n(n+1)/2 为最终结果。

看完算法3是不是感觉眼前一亮,非常清晰。

 

不得不感慨:数学真的是精妙!
 

 

写于湖北省图,2019.10.26

你可能感兴趣的:(新知识)