題目連結:
輸入有若干列(輸入以一個「*」作結),每列給定一個字串,代表一個曲子的各個小節。每個小節之間用一個「/」分隔,字串開頭跟結尾也有「/」。每個小節裡有若干個字元。字元為「W」、「H」、「Q」、「E」、「S」、「T」、「X」,各自代表不同的持續時間,依序是 1 、 1 / 2 、 1 / 4 、 1 / 8 、 1 / 16 、 1 / 32 、 1 / 64 。
而一個小節的持續時間總和應為 1 單位。試問這個曲子符合這個條件的小節有多少個?
/HH/QQQQ/XXXTXTEQH/W/HW/
/W/W/SQHES/
/WE/TEX/THES/
*
用迴圈跑一次給定的字串。用一個變數 S (初始值為 0),每當碰到英文字母時,此變數就加上其對應的時間。
不過為了避免浮點數誤差(儘管這題的數字不太會導致誤差),所以將所有的持續時間同乘 64 。因此碰到 W 加 64 、 H 加 32 、 …… 以此類推。因此如果小節時間恰好為 64 單位即符合要求。
而判斷小節持續時間的時機為碰到「/」字元時,此時就判斷 S 是否等於 64 即可。等於的話,則所求數 + 1 ;反之,不 + 1。判斷完後,將 S 設為 0 ,繼續判斷接下來的小節。
最後,輸出符合的小節數即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。