題目連結:
頻道號碼有 0 ~ 99 共 100 個頻道。而遙控器只剩下「下一台」的按鈕可以使用。
現給定兩整數 a 、 b ,依序代表現在在地頻道以及要轉過去的頻道。試問要按幾次「下一台」的按鈕才能從 a 轉到 b 。
註:能不以 if 判斷式(只用算術運算子)達成目標為佳。
說到這題的解答(其中一種)就不得不提一下餘數的特性(更精確的說,是定義):
餘數不是僅限於正數而已,例如模 5 下,-3 、 2 是同餘的、 -8 也跟 -3 、 2 同餘。
因為取餘在數線上的意義即為:將所有整數(不限正整數)映射到數字 0 ~ n - 1 這個群裡(模 n 的時候)。
然後,剛好本題的要求剛好可以對應於模 100 下的加減法。當 a ≦ b 時,答案自然是 b - a ;而 a > b 時,所求可寫為 b - a + 100 。
因此,我們的解答可寫作(b - a + 100) mod 100 。 a ≦ b 時,後面的 + 100 會被取餘抵銷掉;就算 a > b 時, b - a + 100 將會是正數,模 100 後即無影響。即達成了不用 if 只用算術運算子的要求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。