Python 用自然語言/流程圖描述演算法並實現(以雞兔同籠問題為例)

尹艾發表於2020-10-13

演算法的定義及作用

一、匯入:程式設計解決問題的步驟

  1. 分析問題
  2. 劃分邊界
  3. 設計演算法 #importance
  4. 編寫程式
  5. 除錯測試
  6. 後期維護

注:參考嵩天老師的《Python語言程式設計》

二、生活中的演算法問題:飲料換杯

兩個杯子,一杯裝可樂,一杯裝雪碧,怎樣才能讓裝可樂的杯子裝雪碧,裝雪碧的杯子裝可樂?

再拿一個杯子。

  1. 設計演算法:
    t=a #第一步
    a=b #第二步
    b=t #第三步

  2. 編寫程式碼:

>>> a="可樂"
>>> b="雪碧"
>>> t=a
>>> a=b
>>> b=t
>>> print("a=",a,"b=",b)
a= 雪碧 b= 可樂

完成由演算法到程式的過程。

演算法的定義:解決問題的步驟
演算法是有限步驟內求解某一問題所使用的一組定義明確的規則。

演算法怎麼描述

一、自然語言描述雞兔同籠問題

我國古代數學著作《孫子算經》中應有“今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各有幾和?”

  1. 數學思維:假設法、列方程
  2. 計算思維:窮舉法

列舉出雞和兔子只數的組合,不斷試錯。
試錯有止境。
將雞的數量定義為變數a,則兔為35-a,雞和兔腳數量的總和是否為94即為程式是否結束的判斷標準

二、自然語言描述雞兔同籠問題
演算法描述的兩個基本要素:初始狀態、變化規律。

  1. 初始狀態:最開始嘗試的那一組資料(0只雞、35只兔子)設雞為變數n,兔子為變數35-n。
  2. 變化規律:失敗了之後雞的數量+1,兔子的數量-1。變化規律n=n+1。

故:自然語言描述

  1. 假設的雞的數量為n只;兔的數量為35-n;
  2. n=0;
  3. 如果2n+4(35-n)=94,則輸出結果n;否則執行步驟4;
  4. n=n+1;
  5. 執行步驟3;

二、流程圖描述雞兔同籠問題:

在這裡插入圖片描述

三、程式碼實現

基礎實現:

#雞兔同籠V1:
n=0
m=35-n    #設初值,雞有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:  
    if 2*n+4*m == 94:           #表判斷
        print("雞有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1     #雞的數量加一,兔子的數量減一,不斷試錯
        m=35-n    #直到得出正確答案

執行結果:

雞有 23 只
兔有 12 只

能看過程的:

n=0
m=35-n    #設初值,雞有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:  
    if 2*n+4*m == 94:  #表判斷
        print("符合!")
        print("雞有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1     #雞的數量加一,兔子的數量減一,不斷試錯
        m=35-n    #直到得出正確答案
        print("雞有",n,"只、","兔有",m,"只時,","符合條件嗎?")

執行結果:

雞有 1 只、 兔有 34 只時, 符合條件嗎?
雞有 2 只、 兔有 33 只時, 符合條件嗎?
雞有 3 只、 兔有 32 只時, 符合條件嗎?
雞有 4 只、 兔有 31 只時, 符合條件嗎?
雞有 5 只、 兔有 30 只時, 符合條件嗎?
雞有 6 只、 兔有 29 只時, 符合條件嗎?
雞有 7 只、 兔有 28 只時, 符合條件嗎?
雞有 8 只、 兔有 27 只時, 符合條件嗎?
雞有 9 只、 兔有 26 只時, 符合條件嗎?
雞有 10 只、 兔有 25 只時, 符合條件嗎?
雞有 11 只、 兔有 24 只時, 符合條件嗎?
雞有 12 只、 兔有 23 只時, 符合條件嗎?
雞有 13 只、 兔有 22 只時, 符合條件嗎?
雞有 14 只、 兔有 21 只時, 符合條件嗎?
雞有 15 只、 兔有 20 只時, 符合條件嗎?
雞有 16 只、 兔有 19 只時, 符合條件嗎?
雞有 17 只、 兔有 18 只時, 符合條件嗎?
雞有 18 只、 兔有 17 只時, 符合條件嗎?
雞有 19 只、 兔有 16 只時, 符合條件嗎?
雞有 20 只、 兔有 15 只時, 符合條件嗎?
雞有 21 只、 兔有 14 只時, 符合條件嗎?
雞有 22 只、 兔有 13 只時, 符合條件嗎?
雞有 23 只、 兔有 12 只時, 符合條件嗎?
符合!
雞有 23 只
兔有 12 只

嘗試將雞和兔子的頭和腳的數量改成可以輸入的模式:

a=int(input("請問一共有多少個頭:"))
b=int(input("請問一共有多少隻腳:"))
n=0
m=a-n
while 0<=n<=a and 0<=m<=a:
    if 2*n+4*m == b:
        print("==================================================")
        print("雞有",n,"只")
        print("兔有",m,"只")
        break
    else:
        n=n+1
        m=a-n
       #print("當雞的數量為:",n,"兔子的數量為:",m,"不符合條件!")

執行結果:

請問一共有多少個頭:24
請問一共有多少隻腳:84
==================================================
雞有 6 只
兔有 18 只

提出更改:

當輸入頭和腳的數目求解不出答案時,以上程式不會報錯。
可以利用判斷語句實現這一功能。

相關文章