程式演義第一二回 韋達破敵魔法助陣,解題阿蘭公式立功
上節講到撒旦在耶酥的手下載了跟頭,但最終還是死可瞑目了,因為他找到了問題的真相。我們將繼續我們的程式之旅,穿越時空,回到法國,去見識一下一位號稱“代數學之父”的人物。
本回想說的是,其實解題的方法有多種。
圖:韋達
2.12.1 P12韋達密碼x2-25x+156
韋達 (1540-1603年,Viete,Francois),是法國十六世紀最有影響的數學家之一,第一個引進系統的代數符號,並對方程論做了改進。
他生於法國的普瓦圖。年青時學習法律當過律師,後從事政治活動,當過議會的議員,在對西班牙的戰爭中曾為政府破譯敵軍的密碼。韋達還致力於數學研究,第一個有意識地和系統地使用字母來表示已知數、未知數及其乘冪,帶來了代數學理論研究的重大進步。韋達討論了方程根的各種有理變換,發現了方程根與係數之間的關係(所以人們把敘述一元二次方程根與係數關係的結論稱為“韋達定理”)。
在法國和西班牙的戰爭中,法國人對於西班牙的軍事動態總是瞭如指掌,在軍事上總能先發制人,因而不到兩年功夫就打敗了西班牙。可憐西班牙的國王,對法國人在戰爭中的“未卜先知”十分腦火又無法理解,認為是法國人使用了“魔法”。原來,是韋達利用自己精湛的數學方法,成功地破譯了西班牙的軍事密碼,為他的祖國贏得了戰爭的主動權。另外,韋達還設計並改進了曆法。所有這些都體現了韋達作為大數學家的深厚功底。在其中的一次戰爭中,西班牙的作戰的時間藏在了一個式子x2-25x+156=0中,問題也就出來了:如何破解類似的形如a x2+bx+c=0類的式子,幫助法軍提前知曉作戰時間呢?
2.12.2 破譯韋達密碼:
破解密碼,還是通過我們前面的五步分析法,但解題之前我們必須先熟悉韋達發現的定理,即a x2+bx+c=0的解由a、b、c三者的關係決定,在保證前面式子是一個一元二次方程,即a不為零的前提下,可由△=b2-4ac決定根,如果△>0,則有兩個不同的根;如果△=0,則有兩個相同的根;如果△<0,則沒有根。下面我們可以解題了。
第一步:三積木
這是最簡陋一個圖形,請先畫上一個“目”字形,也是最基本的一步。
第二步:做頭尾
上面的三部分,先分析開頭和結尾部分,開頭是什麼呢?題中的已知可輸入條件,也就是a,b,c,結尾是什麼呢?處理完成後的結果,一眼看不穿,情況比較多,數一下上面的定理,總計有四種情況,但我們輸入一組a,b,c的值,總會有四種可能中的一種出現(如圖1示)。
第三步:連頭尾
如何將開頭和結尾連線起來呢?四種情況選擇一種出現,是分支的情況,先將其總結成兩種,即符合韋達定理的和不符合韋達定理的,分類通過什麼呢?a的值,a=0時不符合,否則符合(如圖3示)。
符合的情況根據韋達定理可分成兩大類,兩個根的,和沒有根的。
下面還要對沒有根的繼續求,根據公式,可分別求出來(如圖4)。
後面還需要對各部分進行求解(如圖5示)。
第四步:貼語法
各個語句和具體語言的語法還有一定的差距,根據相應語言,還要再行將相應語句轉化(如圖5示)。值得一提的是△,因為題中不可能用他表示變數,必須以原有的面目代表它,即b*b-4*a*c
第五步:寫程式碼
下面可以寫程式碼了,本題的程式碼相對來說也比較複雜,要注意各個分支語句之間的包含關係。
input a,b,c
if a>0 then
print “Bu Shihe Dingli”
else
if b*b-4*a*c>=0 then
if b*b-4*a*c>0 then
x1=(-b+sqr(b*b-4*a*c))/(2*a)
x2=(-b-sqr(b*b-4*a*c))/(2*a)
print x1,x2
else
x1=-2*b/a
print x1
else
print “Wu Jie”
end if
end if
(上程式在QB下除錯通過)
2.12.3 阿蘭開講:
計算機語言中,分支語句是我們應對現實問題的強力武器,通過它,可以將這個世界歸成很多種類,然後一個一個解決掉。但現實問題的解決,在理清脈絡之前,是不可能用電腦解決的,這種脈絡,很大程度上我們可以利用前人的成果,韋達研究的意義正在於此。
前人還為我們總結了不少東西,許許多多優秀的科技成果,定理,定律等等,為什麼不用呢。按理說,我們只要有這兩種語句就足夠了,但實際上是不夠的。那麼,除了分支,還有什麼方法我們在程式設計中可以利用呢?欲知後事如何,且聽下節分解 。
2.12.4 小測驗:12小球問題
有十二個小球,有一個質量和其它十一個不一樣,不知道是重還是輕。用一個天平稱三次,把這個質量不同的球給區別出來。
小測驗參考答案:
將12個小球從1-12編上號,四個分成一組,為甲1-4,乙5-8,丙9-12,總計三組。
先取甲乙兩組放在天平兩邊,有兩種結果,要麼相等,要麼不等。
如果甲乙兩組相等,則那個不同的球一定在丙組,取甲組的任意三球與丙組的9,10,11號放入天平,又出現兩種結果:如果相等,則證明球就是12號,再用天平稱一次可判斷其輕重;如果不等,則可判斷其輕重了,一定是在9,10,11三個球中,取其中兩個上天平,又出現兩種情況,如果相等,則證明是第三個,如果不等,則是和前面的輕重關係相同的一個。
如果不等,要記下其輕重關係,這是後面分析的基礎,假設是甲組重,剛將甲組的1,2和乙組的5,甲組的3,4和乙組的6分別組成兩組,放入天平,又出現兩種結果。如果相等,則不同的球在7,8號中,且是輕的,第三次只要將7,8放在天平上就可知哪個輕是哪個;如果不相等,且是1,2,5這一邊重,那第三步拿1,2稱,如果1,2兩球相等,則不同的球是6號,且是輕的,如果1,2不相等,那不同的球是重的,就在1,2中。將上面的甲組重設為乙組重,可通過類似的方法來分析出那個不一樣的球來,但都不會多於三步!
相關文章
- 程式演義第一四回 高斯課堂巴掌助興,阿蘭用心二解迴圈
- 程式演義第一六回 才子選秀求破局,東坡腦動來編號
- 第一回 哥倫布水杯戲權貴,阿蘭煮酒論程式設計程式設計
- 通達信三陰不破陽指標公式主力未離場指標公式
- 為什麼每個人都該知道阿蘭·圖靈?圖靈
- SLG題材破圈者《代號:魔法與策略》更名《荒野國度》
- 尤拉公式——真正的宇宙第一公式公式
- [譯] React Hooks 揭祕:陣列解構融成魔法ReactHook陣列
- 程式演義第一三回 宙斯有意千天撒豆,潘M多情巧用計數
- 自定義View公式View公式
- 《暗黑破壞神2》物品掉落公式公式
- 計算機之父阿蘭·圖靈傳奇的一生計算機圖靈
- 超級魔法兔子設定 V4.0破 解(得到完全註冊碼)
- HDU 1166 敵兵佈陣 (樹狀陣列)陣列
- HDU 1166 敵兵佈陣(樹狀陣列)陣列
- HDU 1166 敵兵佈陣 線段樹入門題目
- 程式演義第一七回 伯虎討費進困局,財子靈動苦寫萬
- 【公式】殺號公式準確率可達98公式
- 程式演義第一一回 撒旦變臉並不可怕,本質亦須真知來抓
- 廣義智慧集基本定義公式公式
- 韋達定理與新關係式的穿越介面
- 韋達定理與第二關係式的通道
- 通達信主力籌碼副圖公式 通訊達公式指標大全公式指標
- 矩陣求導公式【轉】矩陣求導公式
- 【計算機之父:阿蘭.圖靈】- 紀念誕辰 105 週年計算機圖靈
- 通訊達公式指標大全 2019通達信指標公式公式指標
- Java程式設計之道:巧妙解決Excel公式迭代計算難題Java程式設計Excel公式
- opencv影像處理學習隨筆:幫助文件運算公式中saturate的含義OpenCV公式
- 牛客 215E 黃魔法師 題解
- [省選聯考 2024] 魔法手杖 題解
- 全概率公式及其含義公式
- 程式演義第一五回 唐僧設計水仙花搞怪,悟空裝痴一用計數器
- 紀念阿蘭·圖靈誕辰,評選“精彩·好訪談”(圖靈訪談)圖靈
- 第六回 芬奇 “蛋”千年迷坑,阿蘭 “喚”芝麻開門
- 貝葉斯公式及其含義公式
- ABAP計算自動義公式公式
- RSI+BOLL副圖公式原始碼 通訊達公式編寫公式原始碼
- HDU 4686 (推公式+矩陣快速冪)公式矩陣