【打破思惟侷限性】算法問題中的奇技淫巧(不斷更新)

一、數字和問題(Update:2016-7-14)

你們在最初開始學習編程的時候必定都作過這樣一道題:git

  步驟I       給定一個天然數n,編程

  步驟II     將n中每一位數字相加,獲得一個新的天然數m學習

  步驟III    賦值:n=mspa

  步驟IV     判斷:若是n只有一位數字(即0≤n<10)則輸出數字n,不然返回到步驟II。code

沒錯這是道簡單的題目,大部分同窗的思路也跟上面給出的四步差很少。嗯,我也一直是這麼作的,直到在CodeWars上面看到了這樣一段代碼……blog

1 public class DRoot {
2   public static int digital_root(int n) {
3     return (n != 0 && n%9 == 0) ? 9 : n % 9;
4   }
5 }

嗯,沒錯,不須要用遞歸反覆加,只要求一個模一步就出來了。至於爲何能夠這麼作,以本人微弱的數學功底只能從找規律的角度理解一下了:以下表所示,求和結果其實是從1到9反覆循環,所以只要用n模9並對結果爲0的狀況單獨處理一下就能夠了……若是你們有更好的想法歡迎在評論裏給出。遞歸

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息