第六回 芬奇 “蛋”千年迷坑,阿蘭 “喚”芝麻開門

大大老狼發表於2014-11-06

2. 6第六回 芬奇 “蛋”千年迷坑,阿蘭 “喚”芝麻開門

上一節說到古代中國著名數學家祖沖之先生留心生活,最終以發現圓周率而名垂青史,而在祖老先生死去將近一千年後,在歐洲出現了著名的文藝復興運動,這期間也有一位有名的人物以圈圈而得名,他不是跑圈,而是畫雞蛋,他就是達•芬奇。達芬奇畫圈最終的目的是做畫,直到現在,他的名畫蒙娜麗莎還用那迷人的微笑盯著世人,迷人的微笑背後,有許多故事等著人們破解,千百年來,無數仁人志士更是樂此不疲。
本回的重點是,在數字中來遊戲,數字的妙處在這裡,寓樂於數。

2.6.1 P6蒙娜麗莎的微笑
enter image description here

圖2.6.1 達•芬奇和他迷人微笑

 列奧納多•達•芬奇(Leonardo da Vinci,1452-1519),義大利文藝復新時期最負盛名的藝術大師,科學家。他生於佛羅倫薩郊區的芬奇鎮,卒於法國。達•芬奇是人類智慧的象徵,他懷有神靈般的無限理想,試圖重新創造世界的美,量度世界的廣大無垠,解釋世界的奧祕。可是他只有常人的生命和力量。他的抱負是發現一切、研究一切、創造一切。他的生命是一條沒有走完的道路,路上撒滿了崇高的未完成作品的零章碎片,他在臨終前心酸地說:“我一生從未完成一項工作。”
據說,法國著名的盧浮宮有三件寶:一是《米洛斯的阿芙羅狄德》;二是《薩莫色雷斯的勝利女神》;三是《蒙娜麗莎》。前兩件作品出於誰人之手一般人並不確知,但是,《蒙娜麗莎》出自義大利文藝復興時期的達•芬奇卻幾乎家喻戶曉。“蒙娜麗莎”那神奇而專注的目光,那柔潤而微紅的面頰,那由內心牽動著的雙脣,那含蓄、模稜兩可的微笑,總讓人琢磨不透……
她為什麼微笑呢,他笑什麼呢,她究竟是誰呢,和達•芬奇關係如何呢,她的年齡有多大呢?問題越來越多,關於這幅畫和達•芬奇的故事也越來越多。
其實,在達•芬奇的出生年代裡蘊藏著一個祕密,蒙娜麗莎的年齡,前兩個數位的差和後兩個數位的差,組成了她的芳齡。我們的問題是:你能用電腦算出蒙娜麗莎的年齡嗎?

2.6.2 五步積木法解題:

第一步:三積木
這是最簡陋的一個圖形(如圖1),也是最基本的一步。

enter image description here

圖1

enter image description here

圖2

第二步:做頭尾

上面的三部分,先分析開頭和結尾部分,開頭是什麼呢?題中的已知可輸入條件,也就是達•芬奇的出生年代。結尾是什麼呢?本題中要求得的一個結果,即蒙娜麗莎的年齡。

enter image description here

圖3
enter image description here
圖4

第三步:連頭尾
如何將開頭和結尾連線起來呢?也就是ageL和ageM的關係,直接聯絡不上,必須再行分解,因為有關係的是ageL的四個位和ageM的兩個位,所以中間處理部分可分解成兩部分,一是據ageL求出四個位n1-n4,後面則是據n1-n4求出ageM的兩個位(圖3)。下面一部分一部分地來,先求第一部分:
怎樣求呢?一眼就能看出來n1=1,n2=4,n3=5,n4=2,但直接用眼看顯然還不行,還要想想用個什麼公式。先看看n1和1452之間有什麼關係嗎?首先要取得其中的第一個位,怎樣才能得到第一個位呢?可以先將1452/1000,但得到的是個小數1.452,我們要的是整數,只要將小數部分捨去就行了,所以可以通過下面的公式實現n1=int(ageL/1000)。那第二個呢?如果只有三位,方法和求n1一樣;怎樣得到三位數呢?因為求出了n1,可以利用n1,只要將1452-n1*1000就得到了,公式也就有了:n2=int((agel-1000*n1)/100),後面兩個也就簡單了。

再求第二部分:
有了四個位上的數n1-n4,ageM的兩個位也就有了,m1=n2-n1,m2=n3-n4,這樣,ageM就有了,只要將兩個位m1,m2組合到一起就OK,ageM=m1*10+m2(如圖4所示)。

第四步:貼語法

下面我們還用QBASIC語言來解這個題目,其實和第一種本質上是一樣的。第三步圖中的各個語句和具體語言的語法還有一定的差距,根據相應語言,還要再行將相應語句轉化。本題中主要是輸入和輸出,再就是中間的部分內容,由於公式較長,非常容易出錯,需特別注意(如圖5示)。

enter image description here

圖5

第五步:寫程式碼

下面可以寫程式碼了,但問題是在Scratch中沒有int()這樣一個函式來表示取整,其中有一個是取餘數的,所以還需要從取整數變換成取餘數。基本的將一個大數拆分成各個位的方法是不變的,要變的是如何拆的工具。 1452拆出千位1來,可以用這個數本身1452減去452,得到1000,然後除以1000得到,452怎麼來的,正好是1452除以1000的餘數。而拆第二個位時,即1452中的4時,其方法和上面差不多,需要先得到400,而1452除以1000的餘數是452,如何得400,再減去52就有了,52則是1452除以100之後的餘數。兩個餘數相減,得到了數位。有了第二位的經驗,第三位也就有了,第四位也有了,因為第四位是最後一位,其實可以更簡潔。
enter image description here

圖2.6.2 Scratch積木程式碼

2.6.3 阿蘭開講

程式演義到現在,還象兒時的達芬奇在畫蛋,祖沖之在跑圈,直到現在,我們遇到的所有程式設計故事,簡單到令人不齒的地步,腦子不需拐彎竟然能將題目做出?!這些就是我們生活中常用到的問題,順序類問題!也正是重複跑圈的意義所在,正是這種重複的一個個圈,最終鑄就了科學和文藝的大師。而我們什麼時候才能從圈圈中跑出來呢?
達芬奇畫蛋,祖沖之跑圈,看似風牛馬不相及的東西跑到了一起,最終卻都成就了一代宗師,真是英雄所見略同啊!無數次的重複過後,見證了兩位大師的心路歷程。先有簡單,才有複雜;先不會拐彎,才會越來越轉變。
阿蘭告訴大家的是:是什麼促使我們去解開更多的歷史事件真相呢?從蒙娜麗莎的身上,我們不難發現,是對於美的追求,更是一種好奇心!程式設計亦然,生活中有許多有價值的東西等著你去發現呢!
這種美,有時候更是一個線索,是我們發現更復雜問題的線索,蒙娜麗莎微笑背後的故事也許正是它!
後面我們還將奉獻上這樣一些有意思的題目,欲知後事如何,且聽下節分解。

2.6.4 小測驗
哥倫布水杯的第三種解法
哥倫布在發現新大陸後,在慶功宴上提出了一個問題,將桌上的兩杯水給從另外一杯子中換過來,他的辦法是找來第三隻杯子,現在如果讓我們通過電腦解題,而又不允許使用第三隻杯子,該如何是好呢?

小測驗參考答案:

我們重新審視P1哥倫布水杯問題時,不難發現第三種解法!用電腦解題,完全可以扔掉第三隻杯子! 最重要的三句程式碼如下:

a=a+b
b=a-b
a=a-b

相關文章