不知道大家有沒有遇到過「課本的理論看懂了,但考試時卻半題都看不懂」這種情況?雖然不敢保證每個人都會遇到,但個人在數學方面經常遇到這種問題。明明上一秒老師剛講解完,下一秒翻到題目馬上像是失憶一樣,更慘的是,翻回理論後完全不知道要怎麼用在題目上。
身為一位一天到晚被編譯器噴錯的擁有菜鳥程設經驗的新手,其實也了解只學理論絕對是不夠的,最需要的是「實作」,也就是解問題練手感。透過解問題來了解哪些還沒完全學起來,或者是學習一些設計上的邏輯與技巧,或更進階的提升程式效率等。
其實這很像自己摸索遊戲:
在程式的話就是:
而新手頭一次練功總是特別困難,自己第一次面對解題時根本就是全程問號伺候
我的天啊,這解答精簡到根本看不懂
這東西是要這樣用嗎?!
這題目不會是希臘文寫的吧?
由於深知新手上路的痛苦,所以這次選擇了用「面試題」來帶大家學習一些程式的邏輯,選擇面試題是這些題目通常需要思考,並且是學起來或多或少有幫助的。
特別是在解位元運算的題目時,也從沒想過會用到這東西,直到某次寫批改多選題答案的東西時才發現……還好當初有學到這個運用的概念啊!
適合新手上路的程式設計玩家
本系列主要針對入門新手來進行,會選擇難度較低的題目,且盡量會選擇邏輯取向方面的種類,比較複雜或是較少見的題目數量會盡量減少。
建議要擁有基本的程式概念
建議閱讀前必須要擁有最基本的程式概念,雖然後續文章碰到位元運算、資料結構等會稍微提及一下,但在字串、陣列、迴圈的基本部分就不多敘述了。畢竟本次主教是藉由解題來學習程式邏輯,而不是基本程式教學。
不見得會是最有效率的解
俗話說的好:「程式達到效率的極致後,就可以讓大部分的人都看不懂了」,而這次希望的是讓剛入門的新手也能一起練邏輯,所以不見得會是最有效率的解法,但本系列會盡量用簡單的方法講深一點。
稍微提一點,目前有計畫講Java的Integer.bitCount(),這個就真的是效率的極致,講白了沒人帶就是天書XD。但因為它的原理十分有趣,筆者會盡量用簡單的方法讓大家都知道這個讓大家頭痛的惡趣味(?)
沒有一定的程式語言
接下來的文章大多會使用Java,可行的話也會附上其他語言(Python、JavaScript等)的解法。但不一定是用這幾種,只要是熟悉的程式語言都可以自行嘗試改寫,畢竟差別只是語法,邏輯上是大同小異。
前言到這邊,下一篇將會分享本次選題的出處,以及一些解題前的小提示等。