2.8第八回 孔融让梨一炮走红,大小长幼阿兰布道

上一节说到古代中国传奇人物司马光,选择了一块重的石头,引出了一段砸缸的故事。中国古代的名人轶事有许多,孔子后人孔融的故事更是家喻户晓。在三字经中有经典的六个字:“融四岁,能让梨”。

本章的精彩处在于,实现目标的路上,可以是曲线的。

2.8.1 P8孔融的两个梨

enter image description here

图2.8.1孔融让“梨”而得其所

孔融 ,生活在公元153年至208年,东汉末年著名的文学家,是文学史上著名的“建安七子”之一,鲁国人,孔子二十世孙。孔融虽然离开我们近两千年了,但提起他的故事,虽然不多,但却个个令人耳目一新。因为,从小,孔融就给自己定下了目标:出名!

一提起孔融,人们首先会想起“孔融让梨”的故事。在那则故事里,只有四岁、排行第六的小孔融,和兄弟们一起吃梨,竟然拣了最小的来吃,而把大的留给了别人。—个孩童年仅四岁,就懂得谦恭礼让,实在让人啧啧称赞。而这也走出了他成名的第一步:出名趁早。
孔融的天资聪慧,不在让梨一事,还有他妙语答李膺。李膺是当时一位声名显赫的高官和大学问家,性格孤傲,不太喜欢接待一般人。十岁的孔融,跟着父亲去洛阳,却偏偏要见见李膺。李膺一见孔融,很陌生,就问:“你的前辈真的和我有交情么?”孔融从容答道,“那当然了。我姓孔,您姓李,我的先祖是孔老夫子,他曾向您的先祖李耳(老子)学习,你看我们俩不是世交么?”在座的人都惊叹孔融的聪慧。而这走出了他成名的第二步:根正苗红,适合出名,用一句话来说就是:先给名人当孙子,而后是孙子当名人。
做为孔子的二十代孙,孔融还极重兄弟情义。十六岁那年,宦官把持朝政,残害异己,大肆捕杀正直之士,他哥哥的朋友因为为人刚正不阿,被宦官首领追杀,逃到了孔家,而此时只有孔融在家。孔融把此人偷偷的藏在家中。后来事情败露,孔融、哥哥和母亲一家三口争着抵罪,更成为四邻八舍的佳话。名人第三步:出其不意!付出普通人不会有的代价。
正因为上面的三个故事,孔融美名远播。实现着他的目标:出名。
照常理推断,孔融作为圣人后代,根正苗红,儒学造诣精深;但他性格却又豪放不羁,经常有一些蔑视传统、离经叛道的言行。而这就给了一向对他怀恨在心的曹操以口实,公元208年,曹操以孔融大逆不道为藉口,对他及全家处以极刑。当孔融面对专制主义者砍头时,没有发出铮铮铁音,他的话很朴实无华:“我的目的,就是出名!”的确,在文学上,孔融可谓英明千古,彪炳史册。
由此看来,一个目标对人的影响是非常巨大的!当时孔融面前摆着两个梨的时候,我们的问题是:他怎样将这两个梨从大到小放到桌子上的两个盘子里呢?

2.8.2 五步积木法解题:

第一步:三积木
这是最简陋一个图形(如图1),也是最基本的一步。

enter image description here

图1

enter image description here 图2

第二步:做头尾

上面的三部分,先分析开头和结尾部分,开头是什么呢?题中的已知条件,是两个梨子,我们用a和b来表示。结尾是什么呢?因为是按从大到小输出,无非也是两种选择,要么a,b,要么b,a。这样做,我们可以参考上一节司马光石头的成果,问题很简单地就可以得到解决。我们思路还可一转:虽然强扭的瓜不甜,但我们强制最后的输出也是a,b。输入a,b;输出还是a,b。这两个a,b是不是一样呢?显然是不一样的,前面的a,b有两种方案,可以前者大后者小,也可相反,而后一个a,b只有一种结果,即前者大后者小,所以,定好目标:输出从大到小的a,b。

enter image description here

图3
enter image description here
图4

第三步:连头尾

如何将开头和结尾连接起来呢?也就是建立“输入a,b”和“输出a,b”的关系,其特点是两种情况最终只有一种情况出现,所以一定是一种分支的情况了,如图3中间所示,问题分成了三部分:1和2放两种方案,3刚是分成1,2方案的分类依据或标准,符合3,则执行1方案,否则,执行2方案。下面就可以一部分一部分地完成本题了。
1中做什么工作才能输出所要的a大b小的结果呢?很明显,如果3中用的条件是a>b,则在1中什么工作都不用做,就能实现。2则没有这么幸运,需做什么呢?(如图4示)其中的结果和我们想要的正好相反,所以,此部分只要执行“将a,b的值交换!”就行了 。
提到将a,b交换,很温馨的一个问题,这不正是第一节吗!哥伦布水杯,找来第三个杯子,问题就可以很简单地解决了!
第四步:贴语法

下面我们还用QBASIC语言来解这个题目。第三步图中的各个语句和具体语言的语法还有一定的差距,根据相应语言,还要再行将相应语句转化。本题中主要是输入和输出,(如图5示)。

enter image description here 图5

第五步:写代码

下面可以很简单地写代码了,最重要的是中间的部分。整个图可分成三大部分,中间的分支做为一个大部分,这部分复杂一点,上面的一部分原封不动照搬,下面一部分原封不动照抄,中间按分支的结构做好,程序也就有了:

所以代码如下:
input a,b
if a>b then

else
c=a
a=b
b=c
endif
print a,b
(上程序在Qbasic下调试通过)
enter image description here

图2.8.2 Scratch积木程序

2.8.3 阿兰开讲

程序演义到现在,开始出现更多的有意思的地方了:思路继续发生着转变,前面的老问题开始出现在我们的新问题中。题目解完,如果我们再将本题同司马光的石头比较一下,不难看到,孔融的梨子包含了司马光的石头,再进一步,两个数求最大值和两个数排序象本质上又差不多!如果我们再将此问题同第一回比较,会有更惊奇的发现,第一回的问题包含进入此回的一部分中!所以,第一回问题的简单并不代表无用,其实将一个复杂问题剖析得当,最终得到的一定是一些简单的小问题。剖析的能力不可能一下子就有了,掌握了小问题,是具备这种剖析能力的基础。

阿兰告诉大家的是:在编程方面,孔融先生告诉我们更重要的不是梨子大小,而是要有一个做事的目标,梨子只不过是实现这步目标的一个棋子。同样,还要根据自己的情况,制定出比较合适的目标。
后面我们还将奉献上这样一些有意思的题目,如果梨子成了三个,成了多个,会发生什么后果呢?欲知后事如何,且听下节分解。

2.8.4小测验

最大的数
1,2,3所能组成的最大的数是多少?

小测验参考答案:

我们经常想的是很规则的一行,所以有321,那如果将这一行写的高低起伏起来呢?321也就变成了321了,它的值是10460353203。