php漢諾塔
Ⅰ 想學編程不知道從哪裡開始
1、先要確定自己學編程是要干什麼?
2、再來找相對應的編程語言。
科普一下
編程語言:C、C++、java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C
shell、Objective-C、php、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D,golang,Rust
涉及到的工具:sed、awk、grep
我們現在學一門語言,大部分是要用到了才學(基本上是中國的公司用什麼我們學什麼),基於興趣的不多。
解決問題case:已知大量事實,和事實之間的約束,要求挖掘關系。
應用程序case:從小到超大型應用程序,非完全互聯網應用
解決問題case:程序規模不是很大的偏數學問題
特殊應用case:需要大量處理字元串的應用
特殊應用case:需要一個膠水,粘結不同語言寫出來的程序
果斷用prolog族語言。
例如,漢諾塔、地圖著色、數獨問題、八皇後問題等這種考驗智商,並且需要從已知規則中發現模式的問題。擁有一大堆已知案例的應用(例如大部分的人工智慧情況)
除非你是研究者,程序員一般是遇不到這種問題的。當然頂級的程序員也確實得具備解決這些問題的能力。但是他們就算解決也是用c解決的。這屬於叫好不叫座的科研型語言。
這也是大部分軟體公司遇到的情況。一般有幾種沒辦法分出高下的解決方案:C++,Java,C#,VB。當然,這裡面可以有CLR和JVM的不同衍生。例如,理論上,你也可以用scala來代替(不過估計大型公司不會冒這個險)。還是在理論上,你也可以用函數式編程的Clojure和Haskell來做(估計沒人會那麼傻)。還是在理論上,也可以用Ada這種強悍的通用語言,但估計沒人願意接受比C++還復雜的編程語言。理論上(基本只能在理論上),不嫌棄的話smalltalk也行。還是在理論上,python、ruby等配合一定的圖形界面庫也可以勝任(但項目大到一定的程度是,你會欲哭無淚)。
但是,我另起一行。有個語言:D語言。我個人不認為不可以列入首選名單。但是貌似知名度不行啊。。。。企業支持少啊。。。。。確實是門優秀的語言。C++太尾大不掉,需要一種語言,讓C++成為純粹的C++。
最近谷歌強勢的推出了golang,背景是後台程序員C++寫的好的太缺,python寫的後台實在是效率不行。於是一個在這之間的,注重工程管理的,並且是全靜態編譯的golang誕生了,你會發現其擁有C++匹配的效率,也擁有python般豐富的編程庫。其go和channel機制著實讓人著迷,一出來就吸引了大量的後台開發人員,有的公司甚至後台全面轉向go。但是其之前版本的內存回收機制比較爛,所以也有無數坑。現在的golang已經基本解決了這些問題,編譯器也用golang重新實現了。可以說已經產品化了。
與golang競爭搶這個市場的還有rust,這是一個為並行而生,意在取代c++的編程語言。與golang的定位是相同的,但是目的是不同的。rust復雜,很復雜,上手難,但是一旦你掌握,這將是一個很強大的武器。已經有公司放棄golang轉向rust的。但是這個語言的致命缺陷就是復雜,我們已經有一個復雜的C++了,他啥都能幹,還要一個rust做什麼?當然,我不能把rust拍死,畢竟這門語言的牛逼程度時比較逼近C++的。不過我高度懷疑其會較好不叫座。
稍小一點規模的,無法接受面向對象的程序員,有不少用C的。雖然OOP程序員看他們像是不開化的人,但是他們有他們的哲學(我從嵌入式開發過來,相當長時間內也擺脫不了C,總本能的排斥OOP),但是如果讀者是一個nginx或者其他的c底層基礎設施絕對會對oop嗤之以鼻,內核的編程範式已經給c下了一個什麼叫對什麼叫錯的定義了。由於內核作為標桿,大家竟然同步的統一了編程風格。不用商量。nginx給那些歧視c的人上了生動的一課,現在哪一個互聯網公司能離開nginx?
曾經很多人用Pascal(包括擴展的Delphi),曾經很多人用Fortran,但是都明顯在退步。大型通用語言(C++、Java、C#)表明了他們在各種環境的適應能力。lisp系列也在一些問題上展現出古老的魅力。(但這個語言遠沒有《黑客與畫家》的作者給我們描述的那樣神奇,個人認為。不過我的C++風格思想佔了主導,可能沒辦法公正的評價lisp,但是據我的使用lisp經驗,在大部分情況下,我最後還是放棄了它。因為大部分情況下我總能找到用C++(或其他OOP語言)更好的原因)
另外,讀研的一般都用過matlab。這個工具,兩個字:強大!不過僅指科學計算方面。脫離了這個方面,就得考慮合不合適了,畢竟固定的矩陣思維不是啥情況都有效的。我用matlab最多的是神經網路,圖片和信號處理。毫不誇張的說,matlab活脫脫一個photoshop啊。。。(當然,你得會用。。。)不過matlab的神經網路確實不行,做的太差了,小規模的網路可以,3層不用BP的F網,幾十個就掛掉了。有這個需求的用ANN吧。(還是C++,偷笑)
首選利器是Perl,不過如果你習慣了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸收三家所長做的。
其次是C++,別拍我。諸位用過regex嗎?就是boost里的那個,最近被並入C++11啦。有了正則表達式的C++,處理字元,無敵了很多哇。當然,Java程序員別拍我,我知道這種庫一個大型的通用語言都會有。我提C++,一般順帶著不否定Java和C#能以相似的代價完成相同的功能。
首選是python。倆字:精簡(呀,這么說一個強大的語言有點太輕浮了,但比起ruby,確實簡單吶。。。)(另外Boo在.net是可以用來取代python)
Ⅱ 什麼叫漢諾塔問題
漢諾塔(又稱河內塔)問題是印度的一個古老的傳說。開天闢地的神勃拉瑪在一個廟里留下了三根金剛石的棒,第一根上面套著64個圓的金片,最大的一個在底下,其餘一個比一個小,依次疊上去,廟里的眾僧不倦地把它們一個個地從這根棒搬到另一根棒上,規定可利用中間的一根棒作為幫助,但每次只能搬一個,而且大的不能放在小的上面。解答結果請自己運行計算,程序見尾部。面對龐大的數字(移動圓片的次數)18446744073709551615,看來,眾僧們耗盡畢生精力也不可能完成金片的移動。
後來,這個傳說就演變為漢諾塔游戲:
1.有三根桿子A,B,C。A桿上有若干碟子
2.每次移動一塊碟子,小的只能疊在大的上面
3.把所有碟子從A桿全部移到C桿上
經過研究發現,漢諾塔的破解很簡單,就是按照移動規則向一個方向移動金片:
如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,漢諾塔問題也是程序設計中的經典遞歸問題。
Ⅲ 運維工程師筆試題
網易網路運維工程師筆試題目
類型:Windows開發 | 試題:55道試題
Question 1. (單選)
或者當你的孩子變壞時你嚴厲地懲罰他,或者他長大後將成為罪犯。你的孩子已經學壞了,因此,你必須嚴厲地懲罰他。 除了哪項,以下諸項都能構成對上述論證的一個疑難?
1. 什麼是你所說的「學壞」的確切含義?
2. 你的第一個前提是否過於簡單化了?
3. 你的第二個前提的斷定有什麼事實根據?
4. 你的孩子是怎麼學壞的?
Question 2. (單選)
針對作弊屢禁不止的現象,某學院某班承諾,只要全班同學都在承諾書上簽字,那麼,假如全班有一人作弊,全班同學的考試成績都以不及格計。校方接受並實施了該班的這一承諾。結果班上還是有人作弊,但班長的考試成績是優秀。 以下哪項是從上述斷定邏輯地得出的結論?
1. 全班有人沒在承諾書上簽字
2. 全班沒有人在承諾書上簽字
3. 全班多數人沒有作弊
4. 作弊的就是班長本人
Question 3. (單選)
甲城賣出的報紙比乙城多。因此、甲城的居民比乙城的居民更了解天下大事。 以下各句假如為真,都能削弱上述結論,除了:
1. 甲城發行僅限於本地新聞報道的周報
2. 甲城報攤出售的報紙的平均價格低於乙城
3. 甲城人口比乙城多
4. 乙城的很多居民在甲城工作,所以就在甲城購買報紙
Question 4. (單選)
雄性園丁鳥構築裝飾精美的巢。同一種類的不同園丁烏群建築的巢具有不同的建築和裝飾風格。根據這一事實,研究人員認為園丁鳥的建築風格是一種後天習得的,而不是先天遺傳的特性。」 以下哪項假如為真,則最有助於加強研究者的結論?
1. 通過對園丁鳥的廣泛研究發現,它們的築巢風格中的共性多於差異
2. 年輕的雄性園丁鳥在開始築巢時是很笨拙的,很顯然是花了許多年來觀察年長者的巢才成為行家能手的
3. 園丁鳥只在新幾內亞和澳州被發現,很顯然,兩地之間的園丁鳥沒什麼聯系
4. 眾所周知,一些會唱歌的鳥的演唱語調是後天習得的,而不是先天遺傳的
Question 5. (單選)
在過去的20年中,美國黑人議員的數量增加了將近100%,而白人議員的數量則略有下降,這說明,在美國的權力機構中,黑人很快就可和白人擁有相等的政治權力。
以下哪項假如是真的,最有力地削弱了上述論證?
1. 20年來,美國議員的總額保持基本不變。
2. 20年前,白人議員的數量是黑人議員數量的近8倍。
3. 20年來,黑人中的議員競選者增加了將近200%,而白人中議員競選者的數量則基本不變。
4. 20年來,黑人參加政治競選。仍然受到各種非凡的限制。
Question 6. (單選)
人們一直認為治理者的決策都是逐步推理,而不是憑直覺。但是最近一項研究表明,高層治理者比中、基層治理者更多地使用直覺決策,這就證實了直覺其實比精心的、有條理的推理更有效。
以上結論是建立在以下哪項假設基礎之上的?
1. 有條理的、逐步的推理對於許多日常治理決策是不適用的
2. 高層治理者制定決策時,有能力憑直覺決策或者有條理、逐步分析推理決策
3. 高層治理者的決策比中、基層治理者的決策更有效
4. 高層治理者在多數情況下採用直覺決策
Question 7. (單選)
當被催眠者被告知自己是聾子後,再問他們能否聽見催眠者說話時,他們回答「聽不到」。一些學者試圖解釋這一現象,認為被催眠者的「自我」被分裂為各個零散的部分,聾了的那一部分和回答的那一部分是相互分裂的。
以下哪項質疑最能削弱以上解釋?
1. 為什麼回答的那一部分不答「能聽到」呢?
2. 為什麼觀察到的事實都必須有個特定的解釋呢?
3. 為什麼所有被催眠者在上述情況下都做出同樣的反應呢?
4. 為什麼所有被催眠者的自我的分裂部分都是一樣的呢?
Question 8. (單選)
去年電話機的銷售額大幅度上升。為了利用這一形勢,某電話公司預備擴大本公司型號的電話機生產量,同時繼續從事已經家喻戶曉的廣告宣傳工作。
以下哪項假如為真,則最有可能使得該公司採用以上計劃時不能增加銷售額?
1. 雖然去年生產的產品全部售出,但該公司的市場佔有率是下降的。
2. 該公司預備發運給零售商的電話機的庫存數去年有稍微下降。
3. 該公司的電話機是去年銷售額增加的三種品牌之一。
4. 盡管零售價格有所上升,該公司的銷售額去年是下降的。
Question 9. (單選)
有人向某市政府提議應該在所有新建的房屋內安裝一種起火時會自動激發的灑水器。但是一位房地產開發商認為,既然90%的房屋著火都是被家庭成員撲滅的,所以安裝室內自動灑水器對滅火意義不大。
以下哪項假如為真,則最能削弱房地產開發商的觀點?
1. 大多數人都沒有經過滅火技能的正規練習。
2. 住宅著火導致的大部分財產損失是因為起火時家人都不在場。
3. 在住宅內安裝煙霧探測器比安裝灑水器要便宜得多。
4. 該市消防隊奔赴火場的時間要比全國平均時間短。
Question 10. (單選)
以下哪項最適合接在下段文字後面?
人們在購買一種名牌產品時,實際上是花錢買身份。他們希望通過購買名牌產品拉大旗作虎皮,抬高自己。所以,名牌產品的銷售不應採用薄利多銷的策略,因為:
1. 如今出手闊綽的購買者越來越少。
2. 保持銷售額*的是保持名牌產品「獨一無二」的魅力。
3. 名牌產品的購買者對產品的質量和價格同樣關心。
4. 擴大市場范圍有助於提高盈利。
Question 11. (單選)
為什麼不將N e t B I O S用於網際網路互連
1. 它是不可路由的
2. 它是不安全
3. 它是不可*的
4. a和b
Question 12. (單選)
計算機網路分為區域網、城域網與廣域網,其劃分的依據是:
1. 數據傳輸所使用的介質
2. 網路的作用范圍
3. 網路的控制方式
4. 網路的拓撲結構
Question 13. (單選)
用於保存計算機輸入輸出數據的材料及其製品稱為
1. 輸入輸出媒體
2. 輸入輸出通道
3. 輸入輸出介面
4. 輸入輸出埠
Question 14. (單選)
某二*樹結點的對稱序序列為A、B、C、D、E、F、G,後序序列為B、D、C、A、F、G、E。該二*樹結點的前序序列為
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 15. (單選)
某二*樹結點的對稱序序列為A、B、C、D、E、F、G,後序序列為B、D、C、A、F、G、E。該二*樹對應的樹林結點的層次次序序列為
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 16. (單選)
在虛擬頁式存儲治理方案中,下面哪一部分完成將頁面調入內存的工作?
1. 缺頁中斷處理
2. 頁面淘汰過程
3. 工作集模型應用
4. 緊縮技術利用
Question 17. (單選)
對於下列文件的物理結構,哪一個只能採用順序存取方式?
1. 順序文件
2. 鏈接文件
3. 索引文件
4. Hash文件
Question 18. (單選)
對一個排好序的線性表,用二分法檢索表中的元素,被檢索的表應當採用哪種存儲表示?
1. 順序存儲
2. 鏈接存儲
3. 散列法存儲
4. 存儲表示不受限制
Question 19. (單選)
以下哪一個不是棧的基本運算
1. 刪除棧頂元素
2. 刪除棧底元素
3. 判定棧是否為空
4. 將棧置為空棧
Question 20. (單選)
設二*樹根結點的層次為0,一棵深度(高度)為k的滿二*樹和同樣深度的完全二*樹各有f個結點和c個結點,下列關系式不正確的是:
1. f>=c
2. c>f
3. f=2k 1-1
4. C>2k-1
Question 21. (多選)
Windows socket編程中經常需要進行位元組序列的轉換,下列哪幾個函數是將網路位元組序列轉換為主機位元組序列
1. htons
2. ntohs
3. htonl
4. ntohl
5. WSAntohs
Question 22. (單選)
下面哪個協議運行在網路層
1. HTTP
2. SMTP
3. UDP
4. IP
Question 23. (多選)
DNS用於完成地址查找,是經常使用的網路服務,從OSI網路模型來看,下面哪些服務與其不在同一層上
1. HTTPS
2. TCP
3. SMTP
4. PING
5. TELNET
Question 24. (單選)
SMTP的主要功能是什麼
1. 提供有關網路設備的治理信息
2. 在路由器介面層監控安全邊界
3. 在主機間傳輸郵件
4. 提供埠利用信息
Question 25. (單選)
Internet網路層使用的四個重要協議是
1. IP、ICMP、ARP、UDP
2. IP、ICMP、ARP、RARP
3. TCP、UDP、ARP、RARP
Question 26. (多選)
以下關於動態規劃法的描述哪些是正確的
1. 將問題分解成多級或許多子問題,然後順序求解子問題。
2. 可以確保得到最佳解
3. 前一個子問題的解為後一個子問題的求解提供有用的信息。
4. 從問題某一初始或推測值出發,一步步的攀登給定目標。
5. 盡可能快的去逼近更好的解,當達到某一步不能繼續時終止。
Question 27. (多選)
演算法的特徵包括
1. 有窮性
2. 確定性
3. 輸入和輸出
4. 能行性或可行性
Question 28. (單選)
漢諾塔(Hanoi)問題中令h(n)為從A移動n個金片到C上所用的次數,則遞歸方程為
1. h(n)=2hn-1
2. h(n) = 2h(n-1) 1
3. h(n)=2^n-n*h-1
4. h(n)=2h*n-1
Question 29. (單選)
啟發式搜索一般是何種演算法的改進
1. 深度優先搜索
2. 廣度優先搜索
3. 動態規劃
4. 貪婪法
Question 30. (單選)
假設一棵二*樹的後序遍歷序列為 DGJHEBIFCA ,中序遍歷序列為 DBGEHJACIF ,則其前序遍歷序列為 ( ) 。
1. ABCDEFGHIJ
2. ABDEGHJCFI
3. ABDEGHJFIC
4. ABDEGJHCFI
Question 31. (單選)
完全二*樹共有700結點,該二*樹有多少個葉子結點:
1. 349
2. 350
3. 351
4. 352 5. 353
Question 32. (單選)
在下列排序方法中,空間復雜性為O(log2n)的方法為( )。
1. 直接選擇排序
2. 歸並排序
3. 堆排序
4. 快速排序
5. 冒泡排序 Question 33. (單選)
有六個元素6,5,4,3,2,1 的順序進棧,問下列哪一個不是合法的出棧序列?(????)
1. 5 4 3 6 1 2 2. 4 5 3 1 2 6
3. 4 3 5 2 1 6 4. 2 3 4 1 5 6
5. 3 4 6 5 2 1
Question 34. (單選)
散列函數有一個共同性質,即函數值應按()取其值域的每一個值;
1. 最大概率
2. 最小概率
3. 同等概率
4. 平均概率
Question 35. (單選)
下面描述中正確的為:
1. 線性表的邏輯順序與物理順序總是一致的。
2. 線性表的順序存儲表示優於鏈式存儲表示。
3. 線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。
4. 二維數組是其數組元素為線性表的線性表。
Question 36. (單選)
什麼情況下必須要並行開發(多分支開發):
1. 同時開發多種功能
2. 同時開發多個版本
3. 多人同時開發
4. 多地域分布式開發
Question 37. (單選)
軟體測試類型按開發階段劃分是:
1. 需求測試、單元測試、集成測試、驗證測試
2. 單元測試、集成測試、確認測試、系統測試、驗收測試
3. 單元測試、集成測試、驗證測試、確認測試、驗收測試
4. 調試、單元測試、集成測試、用戶測試
Question 38. (單選)
可作為軟體測試結束標志的是:
1. 使用了特定的測試用例
2. 錯誤強度曲線下降到預定的水平
3. 查出了預定數目的錯誤
4. 按照測試計劃中所規定的時間進行了測試
Question 39. (多選)
測試設計員的職責有
1. 制定測試計劃
2. 設計測試用例
3. 設計測試過程、腳本
4. 評估測試活動
Question 40. (多選)
以下對樁(stub)函數的描述正確的是:
1. 在單元測試中調用其它模塊
2. 在單元測試中被其它模塊調用
3. 在自頂向下的集成過程中尤其有效
4. 在自底向上的集成過程中尤其有效
Question 41. (多選)
在一台2.4.x 內核的linux機器上,下列命令用於檢查ipv4的tcp埠監聽情況,哪個是對的?
1. netstat -ant|grep LISTEN
2. netstat -an |grep LIST
3. netstat -at | grep LISTEN
4. netstat -a |grep tcp|grep -i listen
5. netstat -a |grep tcp |grep -i li
Question 42. (多選)
在RH Linux觀察系統負載狀況的常用命令有:
1. top
2. vmstat
3. iostat
4. netstat
Question 43. (單選)
一塊硬碟最多可以有()個主分區?
1. 1
2. 2
3. 3
4. 4
5. 5 Question 44. (單選)
php是一門:
1. 編譯語言 2. 解釋語言 3. 腳本語言
Question 45. (單選)
某應用通過 TCP 協議從客戶端連接伺服器端,但是總連接不上,那麼netstat 輸出的對應此應用的行的狀態最有可能的是:
1. LISTEN 2. ESTABLISHED
3. TIME_WAIT 4. SYN_SEND
5. CLOSE_WAIT
Question 46. (單選)
進行DeviceIoControl時,假如驅動程序看到的輸入緩沖區的地址為0x500000,輸出緩沖區地址為0x600000,則此次DeviceIoControl的緩沖區傳輸機制為
1. METHOD_BUFFERED
2. METHOD_IN_DIRECT
3. METHOD_OUT_DIRECT
4. METHOD_NEITHER
Question 47. (單選)
IDispatch介面主要在什麼地方使用?
1. 用於支持OLE自動化,延時綁定對象的屬性和方法.
2. 用於支持Windows SDK開發
3. 方便在IE和腳本語言里使用COM對象
4. 用於支持鏈接點
Question 48. (多選)
下面4句對Windows API TerminateProcess函數的描述,請問其中有幾句是對的
1. 任何線程都可以調用此函數來終止自己或另一個進程的運行
2. 只要調用過了此函數,則指定要退出的進程已經退出。
3. 只有當無法使用另一種方法來迫使進程退出時,才考慮使用此函數。
4. 用此函數退出進程,進程沒有機會將自己的數據存入硬碟,也無法釋放佔用的內存。
Question 49. (單選)
大量API中都需要一個SECURITY_ATTRIBUTES參數,多數情況下都傳NULL,請問NULL是什麼意思?如:HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, … … );
1. 用最低安全許可權創建對象
2. 用最高安全許可權創建對象
3. 用注冊表中設定的預設安全許可權創建對象
4. 用創建對象的用戶的預設安全屬性創建對象
Question 50. (單選)
調用CoCreateinstance函數創建COM對象時,函數內部首先要獲得以下哪個介面,才能實現COM對象的創建
1. IUnknown
2. IClassFactory
3. IDispatch
4. 以上三個都需要
Question 51. (單選)
Window98內核使用的字元集是
1. ANSI
2. UNICODE
3. ANSI和UNICODE
4. 以上都不對
Question 52. (單選)
使用Windows API 函數CreateFile可以打開的對象,下列哪項說法最准確?
1. 文件和目錄
2. 通信設備
3. 磁碟設備
4. 以上都可以打開
Question 53. (多選)
關於以下的代碼,哪些說法是錯的? HWND hWnd = CreateWindow("#32770", pszName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, _hInstance, NULL); ShowWindow(hWnd, SW_HIDE);
1. 假如pszName 是NULL,則CreateWindow返回NULL
2. 假如 _hInstance參數是NULL,則CreateWindow一定返回NULL
3. 假如不調用ShowWindow並傳遞SW_HIDE,則該窗口將顯示在屏幕上
4. 在2000/XP下調用CreateWindow函數一定失敗,必須調用CreateWindowEx函數
Question 54. (單選)
當一個進程結束運行之後,下列說法正確的是
1. 所有資源都會被釋放
2. 未釋放的系統GDI資源不會被釋放
3. 多進程共享數據不會被釋放,如:內存映射文件.
4. 在堆中分配的內存不會釋放.
Question 55. (單選)
在Windows中,下列關於堆和棧的說法中錯誤的是
1. 堆都是動態分配的,沒有靜態分配的堆;棧有靜態分配和動態分配2種分配方式。
2. 堆的生長方向是向下的,即向著內存地址減小的方向增長;棧的生長方向是向上的,即向著內存地址增加的方向增長。
3. 對堆的頻繁new/delete會造成內存空間的不連續,從而造成大量的碎片;棧則不會存在這個問題
4. 棧是由編譯器自動治理;堆的釋放工作由程序員控制,輕易產生內存泄露。
這是第一輪的考試題。
Ⅳ 我想學習編程,但是不知道該怎麼開始。
我建議最好是從基礎入手,而不是一開始就進行可視化編程。雖然如今國內絕大多數pc都是使用的windows,但是畢竟這知識這個世界的冰山一角。扎實的基礎自然會更有用處。編程其實重要的是程序思維,然後是演算法和數據結構。這些都是超出語言的,就是說不管是學c學java學delphi還是別的什麼,這一部分都是一致的。因此培養這部分的知識可以說是一本萬利的事情。初學肯定是通過語言熟悉思想熟悉演算法和數據結構,到一定的時候就是純粹的思想和演算法數據結構的學習,便已經脫離程序語言了。經歷過這些階段,換一種語言不過是重新了解一下描述的方式,就像你了解了中文思維,山東話和四川話的差別就不會太大;了解了拉丁語的思維,整個語系的語言都不過是簡簡單單的記憶工作,應用就好。入門的語言,理論上是怎麼方便學哪個,看那個順眼學哪個。當然這裡面還是有不同的推薦的。一般來說我比較推薦pascal、c/c++、java。並不是因為這三個東西很通用很有前途,而是它們實在是嚴整而有規則(c/c++還顯得稍微的寬鬆了一點),而嚴謹的語法要求和明確的概念區分是有利於編程思維的形成和演算法數據結構的學習的。同樣的因為這個理由我不推薦vb,而並不是因為它功能不強大(事實上vb在windows環境中是相當牛的語言)另外一個建議是,如果學c,不要一開始就用vc。ms提供的很多東西很方便,有很多很簡單的實現方法,但是它們不標准。vc與ansi
c標準是有很大的差距的。首先一個不遵循標準的c/c++程序是不通用的,換個編譯器說不定就不被承認了。所以我非常推崇gcc,理由之一是它完全符合
ansi
c標准,無論它的c還是c++編譯器都很嚴整,功能上一點也不缺乏(有人說gcc不能做圖形界面的程序,這一點完全錯誤,到處都有的qt庫和gtk庫都能做出很好的界面),另外一個理由便是它免費,畢竟稍微大一點的軟體企業就不會屈從與微軟的編譯器和平台,而一個免費的c編譯器無疑可以創造更多的利益;就算要轉vc,標準的c程序也是幾乎不要作任何改動的。當然,這一切的前提是,你真的很想很好的學編程,做一個這方面的精英。如果只不過是興趣,或者只是想拿一個ms的工程師認證然後在國內企業找份諸如設計vf、vb程序之類的工作,那完全可以忽略我上面的話,去找個認證培訓班,認認真真聽聽課,好好完成練習,從vb或者vc入手,考好認證是很不會太難的。畢竟現在很多很好的大學里都從來不缺乏計算機的課程,不會缺少演算法或者編譯原理的課程,不會沒有計算機科學的研究院,而那裡面出來的人一般都具備了很好的基礎知識,會更加容易成為前面所說的精英。
Ⅳ 誰幫我解釋一下河內塔程序
漢諾塔問題是程序設計中的經典遞歸問題。 演算法思路: 1.如果只有一個金片,則把該金片從源移動到目標棒,結束。 2.如果有n個金片,則把前n-1個金片移動到輔助的棒,然後把自己移動到目標棒,最後再把前n-1個移動到目標棒 補充:漢諾塔的演算法實現(c++) #include <fstream> #include <iostream> using namespace std; ofstream fout("out.txt"); void Move(int n,char x,char y) { fout<<"把"<<n<<"號從"<<x<<"挪動到"<<y<<endl; } void Hannoi(int n,char a,char b,char c) { if(n==1) Move(1,a,c); else { Hannoi(n-1,a,c,b); Move(n,a,c); Hannoi(n-1,b,a,c); } } int main() { fout<<"以下是7層漢諾塔的解法:"<<endl; Hannoi(7,'a','b','c'); fout.close(); cout<<"輸出完畢!"<<endl; return 0; } C語言精簡演算法 /* Copyrighter by SS7E */ #include<stdio.h> /* Copyrighter by SS7E */ void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */ { if(n==1) { printf("Move disk %d from %c to %c\n",n,A,C); } else { hanoi(n-1,A,C,B); /* Copyrighter by SS7E */ printf("Move disk %d from %c to %c\n",n,A,C); hanoi(n-1,B,A,C); /* Copyrighter by SS7E */ } } main() /* Copyrighter by SS7E */ { int n; printf("請輸入數字n以解決n階漢諾塔問題:\n"); scanf("%d",&n); hanoi(n,'A','B','C'); }/* Copyrighter by SS7E */ PHP演算法: <?php function hanoi($n,$x,$y,$z){ if($n==1){ move($x,1,$z); }else{ hanoi($n-1,$x,$z,$y); move($x,$n,$z); hanoi($n-1,$y,$x,$z); } } function move($x,$n,$z){ echo 'move disk '.$n.' from '.$x.' to '.$z.'<br>'; } hanoi(10,'x','y','z'); ?> JAVA演算法: public class Haniojava { public static void main(String args[]) { byte n=2; char a='A',b='B',c='C'; hanio(n,a,b,c); } public static void hanio(byte n,char a,char b,char c) { if(n==1) System.out.println("move "+a+" to "+b); else { hanio((byte)(n-1),a,c,b); System.out.println("move "+a+" to "+b); hanio((byte)(n-1),c,b,a); } } }
Ⅵ php去掉最高分和最低分怎麼算平均分
$input = array ("2", "1", "5", "7", "3", "6", "4");
sort($input);//從低到高排序
$a = array_splice ($input, 1, -1);//去掉頭和尾,也就是最大和最小值
print_r($a);
輸出 Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 )
這樣就去掉了最低和最高
foreach($a as $v){$c+= $v;} //$c就是去掉值最低和最高後的和
$num = count($a);//$num就是去掉值後的元素個數
$value = $c/$num;//$value就是你想要的平均值了
方法還有很多,自己試試吧
Ⅶ 在學習PHP的過程中,什麼時候才可以學數據結
關於這個問題一定不要瞎跟風,一定不要超前,也就是說不要看到網上別人說這個重要就馬上去學,也不要看到別人說它很抽象,很難,就不去學。總的來說,這個玩意是要學,而且必須學,關鍵是什麼時候學?怎麼學?
如果沒有學好該語言的基礎,就不要學數據結構和演算法,否則你學了許久,不但華而不實,派不上用武之地,還極大的打擊你學習興趣。
比如舉個例子:學PHP2年多的人,你在公司開發項目中,用的是比如PHPCMS,你什麼時候用過大學教材上教的數據結構中圖的演算法?或者哈夫曼演算法?但是你卻可以勝任公司的許多用PHPCMS開發的項目,工資可能還不低。
反過來,你哪怕背熟了漢諾塔這些復雜的演算法,但是你沒時間學PHP以及PHPCMS,你去應聘PHP開發職位,你覺得會有幾個給發面試通知?你的簡歷上就只能寫「精通數據結構和演算法」,但是拍不上實戰用途上,結局也很可能挺尷尬的。
別人學文科的連數據結構是什麼都不知道,照樣能找工作,別人就不找需要數據結構的工作嘛。這就說明了:找工作甚至是PHP之類的開發應用領域的工作是和需求直接掛鉤的,工作中用到了什麼才會需要該方面的人才。
所以,學不學數據結構,要看你以後想找的工作崗位需要不需要。如果你是想找個PHP快速開發項目的工作崗位,1年後崗位上需要的框架你用的很熟練,你是很可能當技術經理的。但你可能並沒有用到數據結構中那些復雜的演算法。