程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 幾個簡單的數字問題引發的對計算機邏輯的淺顯思考,細思有味。新手帖,高手勿磚。,邏輯

幾個簡單的數字問題引發的對計算機邏輯的淺顯思考,細思有味。新手帖,高手勿磚。,邏輯

編輯:C#入門知識

幾個簡單的數字問題引發的對計算機邏輯的淺顯思考,細思有味。新手帖,高手勿磚。,邏輯


  在前段時間的學習中,遇到怎麼判斷一個數是否質數(素數),或者判斷一個數是否是奇數的問題,在沒有學習之前,我沒有想到計算機是用什麼樣的方法實現的。我想原因在於人腦的思維和電腦的邏輯在很大程度上是不同的,人腦的思維是立體的,直觀感覺電腦的邏輯是比較死板的,盡管她(付老說,計算機是大老婆,哈哈)在單純計算方面和執行能力和准確率上都很有優勢。比如,判斷奇數,用n對2求余來實現,余數不為0則為奇數,否則不是。是或者不是也就是計算機所"思考"的true or false,其實兩者是對立事件,用if判斷很容易實現,而在其他情況下,不同分類之間也是嚴格的互斥,這也是if,else if,....,else的理論基礎。比如,一個確定的數,要麼是正數,要麼是負數,要麼是0。

  說到質數的判斷,感覺這個思維還是很有味道的,細細想來。我們的邏輯是觀察,稍微有點數學基礎,第一反應直觀的就能看出來是或者不是,甚至能看出質因數來。而計算機是個很敬業的boy,他要很嚴謹地一個數一個數地去試,還是有順序有套路的,這就產生了從2開始一直到n-1去除n(擬判定的值)的邏輯,如果在這個依次進行的過程中找到了一個數並且是第一個數能被n整除,就可以判定n是合數不是質數了,接下來他便不管了,事情做完了呀,看來他還很專業,多余的工作是沒必要做的。如果沒找到那最好,啥事沒有,啪一個標簽—質數。這樣,n%i==0(i=2;i<n;i++)再來一個for循環就實現了質數判斷。

  那麼問題來了,我們能判斷是不是奇數或者質數的前提是該數最起碼是個整數,而質數前提還要是正整數。是不是正數其實很好判斷,如果n<=0便直接丟掉。那麼是不是整數呢,我們之前沒有接觸到,怎麼判斷呢?

  我想了很多辦法,總覺得差那麼一點。剛開始編程,其實並沒有真正理解計算機的邏輯,更不能設身處地地給計算機輸入一個他能聽懂的指令或者待實現的想法。回頭聯想一下質數和奇數的實現過程,其實計算機很單純很天真,看看下面這個語句n*10/10==0,my gold,這不就判定n是整數了麼。一乘一除,以退為進,這真不是一個編程邏輯小白能想到的,人腦一般也不是這樣思考問題的。下面我們再來看一個的數字問題的呈現過程。

  求以下表達式的值,寫出您想到的一種或幾種實現方法: 1-2+3-4+……+n。

  代碼簡介明了卻是意味深長,仔細想想是不是很有意思呢,親測可行哦(輸出計算式的代碼沒有寫上去,也不是本文討論的重點)。當然實現的方法有很多種,我們不妨運用一下我們的數學知識,先將這個數列做個分析計算,不難得出:當n是偶數時,和sum=-n/2;當n是奇數時,sum=(n+1)/2。下面看看實現代碼和運行結果:

                

  同樣也是可行的。接下來我們比較一下這兩種思路哪個更優秀呢?

  顯然第二種思路是更接近我們人腦的一種分析方法,這也使得這種方法對於編程來說顯得很暴力,計算機在實現過程中只起到輸出也就是顯示器的作用,並沒有將他強大的計算能力發揮出來,因為真正的計算和思考我們已經代勞了。所以接下來我們應該更傾向於第一種方法的邏輯,嘗試用計算機的"思維"去解決實際的問題。

  本貼權且寫到這裡,關於更多的數字的問題,下一篇會舉到更多的一些例子,細加品嘗也非常的有趣。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved