每當成為入門cs課程(學生們學習程式語言的課程)的助教時,都困於提出好的練習題。project euler和類似的問題通常對初學者來說來難了,尤其是對於那些沒有很強數學背景的同學。
在這篇文章中,adrian neumann 收集了一些從初級到高階逐級困難的練習題,適合剛開始學習程式設計的初學者。當有新的練習題時,adrian 會及時新增。除了一些gui問題外,練習題一般都是演算法題,無需學習任何庫就可以解決。課程練習題的困難程度有時候取決於你使用的程式語言。例如,關於列表list的練習題若用內部不支援list的c語言來解決的話會困難些。
即使有一定程式設計經驗的人想要學習一門新語言的時候,雖然這對他們來說相對簡單,但我認為這還是有用的。
1. 寫程式將」 hello world」列印到螢幕。
2. 寫程式輸入使用者的姓名並用該姓名和他打招呼。
3. 修改上乙個程式,使得僅可以與alice和bob這兩個使用者用其姓名與之打招呼。
4. 寫程式輸入乙個數n並列印出從1到n的和。
5. 修改上個程式,使得求和的數隻包含3或5的倍數,例如n=17,則求和的數為:3, 5, 6, 9, 10, 12, 15。
6. 寫個程式,要求使用者輸入乙個數n,並概率性的選擇是計算1到n的和還是計算1到n的乘積。
7. 寫程式列印出12×12乘法表。
8. 寫程式列印所有的素數。(注意:如果你用的程式語言不支援任意大小的數,那麼列印出所有你能表示的素數,包括最大數)
9. 寫乙個競猜遊戲,使用者必須猜乙個秘密的數字,在每次猜完後程式會告訴使用者他猜的數是太大了還是太小了,直到猜測正確,最後列印出猜測的次數。如果使用者連續猜測同乙個數字則只算一次。
10. 寫個程式列印出接下來的20個閏年。
11. 寫程式計算:
1. 寫乙個函式,返回列表中最大的數。
2. 寫函式逆轉列表,最好是原地逆轉。
3. 寫個函式檢查指定的元素是否出現在列表中。
4. 寫個函式返回列表中奇數字置的所有元素。
5. 寫個函式計算列表的執行花費總和(the running total)。
6. 寫個函式測試乙個字串是否是回文。
7. 寫三個函式來計算列表中數字的和:分別用for迴圈,while迴圈和遞迴完成。
8. 寫個函式on_all遍歷列表中的每個元素,列印出開始的20個完全平方數。
9. 寫個函式連線兩個列表。
10. 寫個函式交替合併兩個列表,例如:[a,b,c]
,[1,2,3]
→[a,1,b,2,c,3]
。
11. 寫個函式合併兩個有序的列表。
12. 寫個函式計算前100個fibonacci數的列表。
13. 寫個函式,返回指定數的各位數字的列表。
15. 實現下面的排序演算法:選擇排序,插入排序,歸併排序,快速排序,臭皮匠排序(stooge sort)。具體的描述見wikipedia。
16. 實現二分查詢。
17. 寫個函式,給定乙個字串列表並按下面表示列印出來,一行乙個列印在矩形框中。例如列表["hello", "world", "in", "a", "frame"] 列印的結果是:
1
2
3
4
5
6
7
*********
* hello *
* world *
* in *
* a *
* frame *
*********
18. 寫函式將一段文字text翻譯為pig latin返回,英語翻譯為pig latin的規則是:取出每個單詞的首個字母,追加』ay』後再放到該單詞的末尾。例如「the quick brown fox」 翻譯後就變成了 「hetay uickqay rownbay oxfay」。
1. 寫程式在1,2,…,9(保持這個順序)之間可任意放+或-或都不放使其結果等於100,輸出所有可能的放法。例如:1 + 2 + 3 – 4 + 5 + 6 + 78 + 9 = 100。
2. 寫程式以乙個假想行星的一年持續時間作為輸入,產生乙個閏年規則,最大限度的減少與該行星的太陽年的差異。
3. 實現資料結構圖,允許修改(插入,刪除),並能夠儲存邊和節點的值。可能使用(node, edgelist)字典對表示完成該功能最容易。
4,寫個函式生成圖的dot表示(譯者注:dot語言是一種文字圖形描述語言,它提供了一種簡單的描述圖形的方法,並且可以為人類和電腦程式所理解。)。
5. 寫程式自動的給你生成文章:
(1)使用乙個樣例文字sample建立有向(多)圖,其中文字單詞作為節點,如果文字中u後面是v則u和v之間有一條有向邊,多次出現生成多條邊。
(2)在該圖中做隨機遍歷:從乙個隨機的節點開始選擇乙個隨機的後繼節點,如果沒有後繼節點就隨機的選擇另乙個節點。
6. 寫程式自動的將英文文字轉換為摩爾斯電碼(譯者注: 摩斯碼(morse code)是一種時通時斷的訊號**,通過不同的排列順序來表達不同的英文本母、數字和標點符號)或者相反。
7. 寫程式找出給定字串的最長回文子串,盡可能高效的實現。
1. 給定兩個字串,寫程式高效的找出最長的公共子串。
2. 給定乙個整數陣列,寫程式高效的查詢:比位置i處的數稍大的最近鄰數,這裡的距離是指數組下標的絕對差。例如陣列[1,4,3,2,5,7]
,比4大的最近的數是5。先用線性時間做預處理,然後用常數時間做查詢。
3.
給定兩個字串,使用字元插入和刪除將其中的乙個字串轉變成另乙個,輸出最短的插入和刪除序列。
4.
寫個函式實現兩個矩陣相乘。盡可能高效的實現並使用較好的
線性代數庫(linear algebra library,具體可看這裡)進行效能比較。你也許想讀一下
strassen』s algorithm和cpu快取的影響,嘗試不同的矩陣布局,看看發生了什麼。
5. 給定d維矩陣框集合,寫程式計算它們交集的體積,從2維開始逐步計算。
寫乙個盡可能好玩的猜字遊戲hangman。例如你可以使用這樣的大字典並選擇排除大部分單詞仍有解決方案的字母。盡可能高效的實現,比如不要每一輪都掃瞄整個詞典。
寫個程式與人類玩石頭剪刀布(rock, *****, scissors),嘗試證明人類非常不善於生成隨機數字。
寫個程式與人類對手玩battle ship(海戰棋,是雙人玩的猜謎遊戲),輸入座標並輸出是否擊中及此次射擊的座標。
當然我不是第乙個提出要收集類似上面列表這種思想的人。
code kata
99 lisp problems, 99 haskell problems. 這裡的大部分問題都可以用其它語言解決。
rosetta code programming tasks. 這些問題提供了多語言解決方法!
code golf challenges. 這裡的目標是用盡可能少的字元解決問題。
spoj problems. 這是乙個超過13000個問題的列表!
js一些練習題
1 如果陣列中存在 item,則返回元素在陣列中的位置,否則返回 1 function indexof arr,item else else if len 1 else 常規迴圈 function sum arr return s 函式式程式設計 map reduce function sum ar...
一些bash指令碼練習題
這裡有一些練習題 沒有答案 但是執行指令碼過後可以直接看出對錯,大家看著寫寫sh指令碼。1 傳遞三個引數給指令碼,引數名為使用者名稱。將這些使用者資訊提取出來放到新檔案中,並且要求每一行有行號 2 判斷cpu的生產商,在 proc cpuinfo中 3 傳遞三個數給指令碼,判斷最大值 4 寫乙個指令...
題目19 一些簡單的演算法練習題 1
1.比較兩個字串,用o n 時間和恒量空間。源 2.假設你有乙個用1001個整數組成的陣列,這些整數是任意排列的,但是你知道所有的整數都在 1到1000 包括1000 之間。此外,除乙個數字出現兩次外,其他所有數字只出現一次。假設你只 能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在...