『壹』 邏輯思維對一個程序員是有多重要
邏輯思維是什麼?
老總:這個改一下。
程序猿:好的。。。
改好了,改版1.java
老總:這個再改一下、
程序猿:好的。。。
改好了,改版2.java
老總:這個再改一下、
程序猿:好的。。。
改好了,改版3.java
............................
直到最後........
老總:算了算了,重新寫一個。
程序猿:(自個兒腦補暴漫的那張圖.)
『貳』 推薦幾本訓練程序員邏輯思維的書籍!!!
想要真正的了解JAVA思想看邏輯思維能力是沒多大關系的,
記得我剛開始學的時候,老是搞不懂什麼叫面向對象,即使有定義,能解釋出來也往往不能運用得當,建議剛開始學的時候不必太深究每個詞語的定義。這需要一個過程,當你真正開始寫程序後,寫的多了。自然而然的就理解了。
希望你能成功。
邏輯思維的書的話,推薦你去買《哈弗大學的1000個益智游戲》
『叄』 誰有java程序員思維邏輯題(附帶答案),發給我一份。
發我一份吧 358464600
『肆』 如何程序員提高自己的邏輯思維
1、 學習一門腳本語言
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果
跟資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
3、 熟悉Unix/linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…<</p>
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對於程序員來說Unix/Linux比Windows簡單多了,學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁,網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試<</p>
在一台機器上配置Apache 或 Nginx
學習PHP,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程,不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
『伍』 高IQ的請:最不簡單的邏輯思維題——能做出來的就是智力高的,越快你IQ越高!
確實可以三次完成。
羽扇仙的答案(不管是自己寫的還是從哪裡抄的)的確是對的。我在草稿紙上畫了一個樹形圖從頭到尾仔細分析了過了。
要我在半小時之內驗證一個答案是否正確這沒什麼問題。但是要我自己想出這樣一個解答,我自認為在一個小時內難以完成。至於要想出一個比之更好的解答,我對此不作奢望。
所以我只是談談感想,簡單評論一下。
最初一秒鍾確實會想把12分成兩個6,但是馬上就意識到是不行的(居然還有那麼多人提交了這種答案,有點小小的吃驚);然後就想按照分3組的方式進行下去,仔細一做才發現三次不行;接著猛然想到雖然一開始不知道這個次品的輕重,但是可以記錄每一次的結果,利用這個,說不定就可以控制正在三次以內呢?做了一下,做成了,高興了不到一分鍾,發現弄錯了——我做成的其實是9個磚頭的情況。(回想一下,大概是受到了簡單的迭代遞歸的思維習慣的影響)
於是又要重新做,發現按照通常的做法,12個磚頭,第一稱如果相等,接下來的各種分支都很容易,而且也都在3次以內;但是倘若第一稱不相等,就不好辦了。頭腦清楚,並且說必須要四次才行的人,估計都是在這里卡住了。但是許多時候,即使我們至今為止沒有找到任何可行的方法,也並不就因此證明了不存在任何可行的方法。關於一件事的可行性或者不可行性的證明當然也是有的;但是可惜的是,在這里那些說三次不可行的人並沒有真的證明不存在任何可行的方法。
於是我把羽扇仙的答案認真地看了一下,我想既然寫得這么詳細(雖然繁瑣),此人肯定是花費了一番心思驗證過的,不要無視人家的勞動成果(我看的時候並不清楚這是不是抄的)。確實,這個答案比較繁瑣,但是比起那些只有一兩句沒頭沒腦的答案來說,這實在好得太多了。對那些自己隨隨便便就寫出一個想當然的答案、也沒有耐心看完其他解答的人,我想說的是:這種工作是來不得半點浮誇的;真要是能證明,就應該能夠把詳細過程寫出來,同時也要有耐心看這樣的詳細工作。(當然,如果不在乎這些,沒有耐心也沒關系,那就把這些當過眼煙雲吧,以玩票的態度來對待吧,反正也不是自己本職工作,也不是當什麼論文審核人。)
再回到羽扇仙的答案。一批人望而卻步是因為沒有耐心。另一些人可能看到了中間就看不下去,大概由於排版上的某些問題影響了閱讀吧。而且通篇這種刻板的「如果...則...否則...」的方式看起來恐怕也相當倒胃口(對這些東西已經習以為常到麻木的程序員們就不會覺得倒胃口,這也許是因為有更深層次的審美,也許是因為已經沒有胃口可倒了)。題目本身的難度和解答本身的繁瑣也許是更大的原因:在第一稱不相等的這個分支,其解法固然是對的,但是很不直觀,需要看的人自己去慢慢理順(最好是畫個樹形圖來分析)。這里我就不寫出來了。既然樓主已經知道三次是可能的,必定是驗證過的,我也不用多費筆墨唇舌。對於其他看官來說,我要是寫得不夠詳細,那還不如看原來的解答;寫得太詳細又嫌羅嗦。正確答案其實早就在那裡。要是有心的話,與其花時間看我寫的,不如自己去花時間理順一遍,這並不需要什麼過人的創造力,需要只是細致和耐心(我相信能從開頭看到這里的人已經非常有耐心了)。
真正有些原創性的可能還是xiaozhu36955的解答。雖然我第一眼也對其不屑一顧,第二眼就知道其解答不符合「題意」,就像pjw258所說,對蹺蹺板的次數進行了「非法」的使用(如果按照「正確」的使用方式,也就是我們解這道題時所默認的那種使用方式,xiaozhu36955的解答當然是無法保證在3次以內的,只能保證在6次以內(運氣好的話只要2次,運氣差就要6次))。然而這個解答成功地跳出了我們默認的框框,進行了創造性地發揮。雖然要想到羽扇仙那個答案也需要突破許多束縛,但是二者不是在同一個層面上的突破。其實如果真要在現實場景中去找那塊重量異常的磚頭,我還寧願用xiaozhu36955的方法,簡單易行;而羽扇仙的方法固然稱的次數少,但是在稱之前和稱之後腦子里都要繞好多彎彎,還要記錄稱的結果,不斷回顧與比較,有這閑工夫,早就用xiaozhu36955的方法(或者其他笨辦法)找到那塊磚頭了。(但是假如任務不是稱磚頭,而是稱成噸的鋼材,花點時間思考怎樣盡量減少稱的次數以降低成本還是很有實際用途的;又比如還是稱磚頭,但是不是一次性的,而是每一批貨都要檢查重量異常的磚頭,那麼第一次花點時間想出最少稱重次數的方法,將之程序化,以後就方便了。)
給我兩天時間,我會給出解答。如果兩天後我沒有提供任何解答,或者給出的解答是錯誤的,那就把分數給pjw258吧。
在給出我的解答之前,先簡要評論一下這些天來新出現的四種解答。
新出現的解答有:
1、QQ850912617(以下簡稱QQ同學)——第一次5:5
2、姜胖大人——第一次4:4;不相等的話,第二次稱就把其中一邊的4個平均分成兩份分別放在蹺蹺板兩邊,另一邊的4個取兩個分別放在蹺蹺板兩邊
3、278102649(以下簡稱27同學)——第一次4:4;不相等的話,第二次稱就把左右各拿走一個,並把左右各取一個對調
4、1645425——力矩平衡大法
最後這一種雖不是標准解法,但是正因如此,才顯得很有意思。我忍不住要把1645425稱作物理小王子了,希望你再接再厲,發明出更多更新奇的物理稱法。
第一種和第三種稱法都是稱不出來的。實際上,在掌握了下面我給出的一般方法之後(是的,我給出的是一般方法,這個方法適用於所有使用天平在n個磚頭中找出唯一那個次品的問題),就很容易看出,在12個磚頭中尋找1個次品,如果限定三次之內完成,那麼第一次稱只能是4:4,每一邊的個數既不能大於4,也不能小於4。所以QQ同學在第一次稱重的時候就註定了不可能三次完成。而27同學的失誤則發生在第二次稱重,不是「好像還差一點」的問題,如果你不改變第二次稱重方案的話,永遠也不可能在三次以內完成。這些都可以按照我給出的方法得到證明。
姜胖大人的方法是可以做出來的,不過存在細節上失誤。大人原話是這樣說的:「假設第一次左邊,即1234重,那麼第二次稱127和348。如果平衡,那麼異常球在56里且輕;如果還是左邊重,那麼異常球在128里且為重;如果右邊重,那麼異常球在347里且為輕」。仔細分析就會發現,如果左邊(或右邊)重,那麼只能說異常球在128里(或在347里);加上「且為重(且為輕)」不僅是畫蛇添足,而且是錯的。(當然,平衡的情況下說「異常球在56里且輕」是正確的。)如果拋開這些失誤,那麼姜胖大人的方法是唯一一種這樣的方法,即:在第一次稱重不平衡的情況下,第二次稱重不需要藉助這8個磚頭之外的任何磚頭(即第一次稱之後已被證明為正常的那4個磚頭)。
當然,樓主見過的2種不同方法,其中一種大概是和姜胖大人一樣的。
以下是我的解答:
先別急著動手。在做之前,先分析一下稱重的作用。每一次稱重的作用無非是令我們排除一些可能,縮小搜索范圍,判斷出重量異常的那個次品在哪個范圍內,並確定下一步該如何稱。而做到這一點,僅僅是通過觀察稱重的結果。每一次稱重的結果最多有三種可能:左>右;左=右;左<右。可是,由於不知道次品和正品孰輕孰重,因此左和右孰輕孰重對於我們下判斷做決定便不能構成任何區分,我們只能說兩邊相等或者不相等。但是,倘若之前有一次稱重的結果也是不相等,那麼本次稱重的結果相對於之前那一次稱重的結果就可以區分出三種可能了,也就是說,這時候的左大於右還是右大於左,在之前那一次不相等的稱重背景下就有了區分的意義。
所以每一次稱重,也許能區分出三種可能,也許能區分出兩種可能。能夠區分出多少種可能,接下來就會有多少個分支。當然僅有一種可能結果的稱重也是有的:所謂只有一種可能結果的稱重,就是說,我們在這次稱重之前就能推斷出是哪一種結果。這樣的稱重當然是毫無作用的,所以不要把稱重次數浪費在只有一種可能結果的稱重上。
排除了這種無用的稱重,那麼每一次稱重接下來的分支可能有兩條或三條。更准確的說,如果之前從來沒有出現過不相等的稱重,那麼當前這次稱重最多隻能有兩條分支——相等或者不相等;如果之前出現過不相等的稱重,那麼此次稱重最多可以有三條分支——相等、和前面那次不相等的稱重方向一致或者相反。
現在要確定一下使用的記號。A和B是兩個集合,其元素都是磚頭,A:B表示把A中所有磚頭放在蹺蹺板左邊,B中所有磚頭放在蹺蹺板右邊,來稱重。我們用g(A)表示A的重量,g(A)=g(B)表示蹺蹺板平衡。現在我們要考慮:不平衡的時候採用什麼記號?我們可以用g(A)≠g(B)表示蹺蹺板不平衡,但是為了和以後稱重中可能出現的不平衡相比較(方向一致或者不一致),我們採用這種記法:A∧B,表示g(A)>g(B)(或g(A)<g(B));相應的我們引入A∨B,表示g(A)<g(B)(或g(A)>g(B))。也就是說∧表示大於或者小於,但究竟是大於還是小於並不確定,也不重要。關鍵是,當∧表示「大於」的時候,∨表示「小於」;當∧表示「小於」的時候,∨表示「大於」。當然,我們也可以採用其他記法:
1、直接在每次不平衡的時候說「大於(或者小於)」以及「小於(或者大於)」;
2、用類似∧∨這樣一對符號來表示1中的意思;
3、只使用一個符號(比如∧),但是在說A和B不平衡的時候,詳細說出究竟是A∧B,還是B∧A,以示區別。
要注意兩點:
第一,以上2和3中的符號都應該表示反對稱關系。([R是反對稱的]當且僅當[對於任何xy,若xRy為真則yRx為假]),上面出現的<>∧∨都是這樣的關系。而=和≠都是對稱關系([R是對稱的]當且僅當[對於任何xy,若xRy則yRx]。)
第二,2中的兩個記號所表示的兩個反對稱關系應該互為鏡像。(設S和R都是反對稱關系。[S和R互為鏡像]當且僅當[對於所有xy,xSy當且僅當yRx]。)
當使用表示一對互為鏡像關系的符號,並且在比較的雙方已知的情況下,我們採用下面的簡寫:在比較A:B的時候,「A∧B」簡寫為「∧」,「A∨B」簡寫為「∨」(同時,「A=B」也簡寫為「=」)。我們可以採用自己喜歡的記號,只要不引起歧義就行。比如我最初在草稿紙上寫的時候就只用一個向上的箭頭↑,寫的時候就「A↑B」「B↑A」這樣寫;後來也上下兩種箭頭一起用(↑↓),寫的時候就只寫「↑」或「↓」。或者,用0代替=,1代替∧,-1代替∨,也是可以的。
下面我要引入樹形圖來幫助解題,它將貫穿下面所有的證明。
一個樹形圖由有限個點和有限條線構成,每條線都自上而下聯結兩個點,其中上面的點稱為下面的點的父結點,下面的點稱為上面的點的子結點。一個點如果沒有任何父結點,就稱之為根。一個樹有且僅有一個根結點。除了根結點,其他每個點都有且僅有一個父結點。每個點都可以有若干個子結點,子結點之間沒有線相連。一個點如果沒有任何子結點,就稱之為葉子。如果從根節點出發到達某個結點需要經過n條線,那麼這個結點就在第n層(注意:根結點在第0層)。組成這棵樹各個結點的最大層次就是這棵樹的深度。
我們要用到的樹就是這樣,但是為了滿足這道題的具體需要,還需做一些細化。
假設我們要從磚頭集合U中找出那個異常元素。我們讓一棵樹除了葉結點以外的每個結點都對應一個二元組<X,Y>。其中X是U的子集,表示經由前面所有步驟判斷出那個異常元素所屬的范圍;Y則表示A:B這樣一個稱重操作,其中A、B都是U的子集,且A與B沒有交集,而且A和B的元素個數要相等(我們不知道正常與異常磚塊的重量比,也不使用力矩稱法,所以只能在蹺蹺板兩邊放置同等數量的磚塊)。而每個葉結點對應U的一個子集,並且是單元集(即只含有一個元素的集合),葉結點上不再需要稱重操作,因為已經確定異常元素是哪一個了。以後,在不會引起歧義的地方,我們直接把某個結點對應的判斷和操作簡稱為判斷和操作。我們還要給每條線都標上=∧∨這些記號。它們表示這條線上端那次操作的結果,如果上端那個操作是A:B,那麼=∧∨分別表示g(A)=g(B),A∧B,A∨B。標注著不同記號的線導向相應的下端判斷或操作。從現在起,我們有時也稱一棵樹為一個策略。
我們在前面說過,如果一次稱重之前不存在至少一次不相等的稱重結果,那麼此次稱重最多隻能分出兩種可能;否則,最多能分出三種可能。也就說,如果在一個結點之前,還不曾有過某條線(這條線不一定是緊接著這個結點的,但是必須能夠經由這個結點向上通達到)被標記為∧或∨,那麼這個結點的分支數最多兩條;否則分支數最多三條。現在我們按照這一規則,從一個根結點開始向下分叉,並且使得深度不超過3。將每個結點下面的分支數目以及樹的深度最大化,就得到下面的樹形圖。
這棵樹的葉結點一共14個,但是從14個磚頭里找到一個重量異常磚頭的任務是不可能確保在三次內完成的,因為還需考慮以下限制。
如果只關注每個結點處的判斷集合,即判斷異常磚塊所屬的那個集合,那麼下面幾項條件限制著每個結點上集合(但沒有窮盡所有限制)。
首先,一個策略的葉結點必須都是單元集,否則這個策略還是未完成的;
其次,一個結點上的集合恰好分割成它的子結點上的集合,即:一個結點的子結點上的集合互不相交,並且這些子結點對應集合的並集就等於該結點上的集合;
第三,一個結點下方所有葉結點的個數必須等於該結點對應集合的基數(即它的元素個數)。
(第三點可由前兩點推出)
我們看到圖中這棵樹的根結點向下分為兩棵子樹,左邊的子樹有5個葉結點,右邊的子樹有9個葉結點。根結點上的集合就是U(就是任務開始時所給磚頭的集合),而根結點上的操作則是A:B,其中A和B都是U的子集,且互不相交。根結點向下分出兩支,分別對應著A=B時的操作和A∧B時的操作。若A=B,則異常磚塊一定不在A或B當中;因此,在A=B這一分支下的子結點上的集合等於U-(A∪B)。若A∧B,則異常磚塊一定在A或B當中;因此,在A∧B這一分支下的子結點上的集合等於A∪B。由於A和B的基數相等,假設A的基數為a(a為正整數),則A∪B的基數就等於2a。因此,右邊子樹下的葉結點數目必須是偶數。有了這個限制條件,且又知道深度為3的樹的右邊子樹的葉結點最多有9個,於是我們知道右邊子樹的葉結點最多有8個。8和左邊子樹的葉結點數目5相加就是13。這就證明了不存在三步以內的策略,能夠將大於等於14個磚塊中的異常磚塊找出來。
由上面的設定還可以知道,若U的基數為w,則U-(A∪B)的基數為(w-2a)(因A的基數是a,且A和B基數相同),也就是左側子樹的葉結點數要等於w-2a,且由於深度不大於3的樹左側葉結點數最多是5,於是w-2a≤5;類似的,右側子樹的葉結點數要等於2a,且由於深度不大於3的樹左側葉結點數最多是9,於是2a≤9。解出來就是(w-5)/2≤a≤9/2。若w=12,則a只能為4(若w=13,a也只能為4)。
(未完待續。抱歉,今天拉肚子,不然現在就寫完了。上面已經證明的結論:在n塊磚里找出一塊異常磚頭,且能夠保證在三次以內完成的,n不能大於13;當n=12,第一次稱重必須為4:4。明天將證明:n=12時,有10種方案可以3次完成;n=13時,有12種方案可以3次完成。我相信根據我上面給出的線索,已經有很多人知道該怎麼做了。)
『陸』 java程序員做後端的,如何鍛煉邏輯思維經常被困惑,感覺要瘋了,有沒有更好的辦法急急急!
很簡單啊,提高自己的演算法和數據結構能力,是鍛煉一個程序員邏輯思維能力的最好方法。
最好找一本國外的演算法與數據結構的書,最好有課後習題答案的,一章一章啃,盡量完成課後習題。一本啃下來,自己的水平會有質變的。因為編程所遇到的大部分演算法邏輯,都演化於演算法與數據結構中的經典演算法。
另外呢,還要提高整體邏輯,就是各種架構的邏輯。雖然這些邏輯本質上也是演化來的,但是在不同場景的應用就會有不同的改編。理解了這些邏輯,甚至可以自己從0開發後端系統。最好的方法是,學習框架,然後讀源碼。學習框架不是學習如何用,而是學習如何寫,如何設計。但是框架很多,最好從你最熟悉的入手,如果有權威教材,啃教材很不錯。每一個框架的邏輯都是很優美的,如何根據場景最大化效率,魯棒性,安全性,如果你把數據結構和演算法基礎打牢了,會理解的。
當然說起來容易做起來難,如果你真的能做到上面這些,邏輯早就不是困擾你的問題了,而是可以成為一個非常厲害的大牛了。
『柒』 程序員的邏輯思維會對生活產生什麼影響
對讓生活變得特別規律和枯燥,他會用邏輯思維去想一件事,特別累,也接受不了他每天這樣思考,生活無趣。
『捌』 開心一該~!程序員邏輯思維問題
先說這里有話誤導人!
我先算算……
知道了!小二的兩個子兒不算付錢!
應該算上還窮書生的
問題本身是錯的
這種問題最變態了……
而且LZ這個問題有點老了,我都忘了怎麼算了
要想把小二的放進去應該是
老闆25+小二2+書生收3=書生付30
或者改一下所謂題目
書生付27+書生收3=30
小二的錢怎麼亂放公式呢!
硬是把小二的放進去的話我再想想
不可能的,基本上我寫的公式都可以轉換過來的
『玖』 作為一個初級程序員,感覺自己邏輯思維能力不是特別好。請問有什麼鍛煉編程方面邏輯思維能力的方法嗎
當然是多寫程序啦,一定要自己多碼代碼,寫的多了自然什麼都好了。親身體會