python是如何利用窮舉法去解數學問題?

2020-12-14 葉子陪你玩編程

前幾天收到一個問題,說有下面這樣一道題,問我該怎樣計算,我直接說4x3x2=24。這個問題用數學方法就是非常簡單,就是排列組合的問題;但是要把它轉化為計算機去求解,不知道如何下手。

其實很多人用數學會解決問題,用計算機不會解決,除了多計算機的一些基本規則不了解外,更多其實還是自己無法將自己的想法描述出來,我一直覺得,如果你能用文字或者語言描述清楚問題,那麼你就可以用程式語言去解決。

但是絕大多數時刻,我們其實就是記住了一個公式,如果這裡不能套用公式,可能就不知道如何求解了,這個時候其實回歸定義或者從最笨的方法下手,便於我們從新跳出框架理解問題。

這道題我的思路就是用語言描述就是從ABCD中隨機選取一個字母,有4種可能,剩下的字母繼續有3種可能選擇,最後有2種選擇可能。組合一起就是24種。

轉換成編程,就是編程要如何去實現從4個字母種如何選擇一個字母呢?然後再從剩下的當中繼續選取。可能你又會發現新的問題,如何保證這次選擇的和上次不一樣?如何又可以保證所有的情況都已經找出來了?繼續想可能你會覺得變得很複雜了。

不知道如何下手我們就用最笨的方法,一個個去組合列舉,滿足的就列印,不滿足的就不列印,為了防止漏掉某種情況,我們就按照順序來;

第一個是A,第二個可以BCD;

第二個是B,那第三個可以CD;結果--ABC--ABD

第二個是C,那麼第三個可以BD;結果--ACB--ACD

第二個是D,那麼第三個可以BC;結果--ADB--ADC

上面一輪的所有情況就列舉出來了,一共6種;同理往下推理就是第一個是B,第二個可以是ACD,根據上面的數據結果,其實我們已經可以知道結果就是4x6=24種了。只要按照這個方法下去,每一種情況都可以列舉出來。

一個個元素去列舉出來,這個我們很清楚,用循環就可以了。三個字母我們就用三次循環嵌套,這裡會出現重複的情況,上面人工列舉的時候我們是自動過濾掉重複字母情況的,在編程中,你只要把我們剛才過濾的規則用程式語言描述出來就可以了,就是第一個,第二個,第三個不想等。

求解代碼:

雞兔同籠問題

上面用到的其實就是列舉法或者叫做窮舉法,類似的問題有很多,比如下面比較有名的雞兔同籠的問題:

用數學的方法解:

假設 雞有 x只,兔子有y只,根據關係可以列出下面的等式。

x+y = 35

2x+4y = 94

用編程的方法求解:

這裡使用窮舉法,其實就是一個個去套,假設 雞有1隻,兔子有34隻,結果不滿足;假設 雞有2隻,兔子有33隻,結果不滿足,以此類推,直到情況滿足,得到一個結果,這就是所謂的窮舉法,這裡的情況雖然不多,但是如果人自己一個個去套還是有些麻煩的,如果給計算機去套,還是非常簡單的,只要告訴它規則就可以了,滿足規則輸出結果。

windows下批處理命令bat是如何工作的?

python圖形用戶界面(一):創建第一個GUI圖形用戶界面

python圖像處理-濾鏡處理

python圖像處理-實現驗證碼圖片(上)

相關焦點

  • 窮舉法與極值思維
    這道題本身沒太大難度,關鍵是要能夠不遺漏地找出所有解。列舉所有的可能性是一項必不可少的素養。窮舉法是解決這類問題的最有效手段。所謂窮舉法,就是根據題目的部分條件確定答案的範圍空間,並在此範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。
  • 用python來研究數學
    python作為一種流行的程式語言,其本身就具備較好的數學計算能力。
  • 回歸計算機本質——使用 Python 解數學方程
    今天我們就來學習一下,如何用python解決數學問題。說到數學題,相信大家都不陌生,從小學到大學都跟數學打交道。 其中初中的方程組,高中的二次曲線,大學的微積分最為頭疼。比如這個:今天我們就來學習一下,如果用python解決實際的數學問題。
  • For循環與簡單窮舉法
    窮舉法,一一列舉問題的可能答案或者構成答案的關鍵要素,然後判斷答案是不是問題的解(判定性問題),從而改變求解思路。
  • 藍橋杯Scratch競賽算法初體驗-窮舉法(一)
    本講開始我們的第一個算法學習-窮舉法。講課之前插個題外話,嘿嘿。通過和不少家長的溝通後,發現大家普遍有一個誤區。在各種大型機構轟炸式「宣傳」下,大家陷入了一個這樣的漩渦:我們孩子到底該學哪一門程式語言?這個高級,那個低級。我可以負責地講,啟蒙階段選擇Scratch是絕對沒錯的。等對編程有了較深地認識後,就可以轉而學習C++。
  • 利用python解決凸優化問題
    用數學公式對其進行定義就是,給定一個數據的集合C,x,y∈C,0≤θ≤1,如果數據集滿足條件:θx+(1θy)∈C,那麼C就是凸集。用圖形表示:圖中,左側為凸集,右側非凸集。如何判斷一個函數是凸函數第一種判斷方式是利用一階導數,當函數滿足條件:用圖形表示為:這是函數一定為凸函數。
  • 教學 | 線性規劃 4 :窮舉法、單純形法和內點法
    不過,作為一名運籌學愛好者,還是可以告訴你,下次去爬山,如何能夠儘可能在8點20之前爬上最高的山丘。到了山丘,即使沒有伊人等候,也能保證至少有一個頂點在等候。這就是涉及到LP問題的窮舉法、單純形法和內點法。
  • 初中數學,如何利用函數圖象解一元二次不等式(方程)
    大家好,這裡是周老師數學課堂,歡迎來到百家號學習!中考數學當中,代數問題往往是以一元二次方程(不等式)與二次函數為主體,多種其他知識點輔助的形式出現的。一元二次方程(不等式)與二次函數問題當中,純粹的一元二次方程解法通常會以簡單解答題的方式考察。但是在後面的中難檔大題當中,通常會和根的判別式,整數根,不等式的解集和拋物線等知識點結合的題型出現,那麼就需要我充分利用二次函數圖象性質解題。
  • 如何利用python進行總分排名
    獲取多科成績之前我們講了如何取得數學這一科的成績,但是我們要計算總成績的話,就需要獲得其他幾科的成績
  • 國象與數學|八皇后問題如何解?
    我們對於他的了解非常少,至於他為什麼會提出這個問題更是無從考證。不過「八皇后難題」一經提出就吸引了很多棋手甚至數學家的興趣。很明顯,滿足八皇后條件的解法並不唯一。但是一共有多少種呢?數學王子高斯第一個做出了嘗試,他使用行列式(determinant)的方式推導出了76種擺放辦法。計算機發明之後,這個問題的答案被解出,一共有92種。
  • 數學建模(一):用python解決線性規劃問題
    最近準備去美賽觀光一波,於是了解了一下數學建模的相關知識,我準備以復現代碼為目的學習,在此寫點東西與大家共同探討一下。
  • python中利用py幫助命令擴展開發知識面
    知識回顧:上一節主要學習了%取餘數,舉例如下:5%3=2利用這個取餘的方法,我們可以計算幾天後是星期幾的問題?往往企業中的生產環境比較簡單,但是需要我們可能去解決一些bug,需要現場調試,此時,現場開發,可能用到幫助來提示我們一些函數的用法。二、如何利用幫助命令解決問題?1、利用dir()函數來獲取當前環境下面有哪些模塊?
  • 乾貨來襲:管理類聯考(數學)的必考知識點
    ,分式聯比,分式方程   3.函數:   注意定義域、〖函數建模〗、〖函數值域(最值)〗   (1)集合:互異性、無序性,元素個數,集合關係,〖利用集合形式考查方程不等式〗   (2)一元二次函數及其圖像:【最值應用(注意頂點是否去得到)】,〖數形結合圖像應用〗   (3)指數函數
  • 如何用窮舉法減少產品設計時的邏輯疏漏?
    窮舉法是一種思維模式,適用於解決線索不夠,但又需要完整考慮邏輯的問題。本文將闡述窮舉法在網際網路產品設計中的應用,適合經常出現邏輯疏漏的人,比如我。、從密碼鎖說起小時候為了保護自己的小羞澀,我用過密碼鎖。然而有密碼,就一定有忘記密碼。
  • 用scratch編程來解「中國餘數定理——韓信點兵問題」
    105這個數字是3、5、7的公倍數,因此一個數字加上或者減去105之後,不會改變除以3、5、7的餘數,因此在剛才得到的233上添加或者減去幾個105,都是問題的解。我們再把這個韓信點兵這個問題條件設置得更符合實際一些:韓信帶兵1500人去打仗,戰死四五百人。
  • 2016年管理類聯考數學重要考點預測
    對於今年聯考的考點及當下如何更有效的複習也是成了很多考生非常關心的問題,所以下面MBA小編就今年數學考點做如下預測: 備註:[]表示重難點,〖〗表示重點預測。> 4、代數方程: (1)一元一次方程:解的討論 (2)一元二次方程:(可變形)求解,判別式、韋達定理,[根的定性、定量討論](利用二次函數研究根的分布問題)
  • 2015年考研管理類聯考必考點—數學部分
    第1部分數學   數學備註:【】表示重難點,〖〗表示重點預測.,分式聯比,分式方程   3.函數:   注意定義域、〖函數建模〗、〖函數值域(最值)〗   (1)集合:互異性、無序性,元素個數,集合關係,〖利用集合形式考查方程不等式〗   (2)一元二次函數及其圖像:【最值應用(注意頂點是否去得到)】,〖數形結合圖像應用〗   (3)指數函數、對數函數:圖像(過定點),【單調性應用】
  • 【Python 第53課】 數學運算
    今天從打飛機遊戲裡中斷一下,說些python的基礎。math.fabs(x)絕對值三角函數: math.sin(x)math.cos(x)math.tan(x)math.asin(x)math.acos(x)math.atan(x)注意:這裡的x是以弧度為單位,所以計算角度的話,需要先換算角度和弧度互換: math.degrees
  • 什麼是運算符和表達式,在python中是如何處理數學運算的?
    又到了和大家分享的時刻了,初識python,相信很多編程愛好者們對程序的解義在心裡應該有一個概念了吧,對於pycharm的用法與進位的認知,在大家的心裡是否還有印象?前面我們提到了python的核心數據(整數型、浮點型、複數等),那麼大家是否知道,這些數據是用來幹什麼的呢?
  • 巧解初中數學軌跡問題
    巧解初中數學軌跡問題