編寫乙個演算法來判斷乙個數是不是「快樂數」。
乙個「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。
我們的第一感官,這道題真簡單 ^>^ ! 我也是這麼想的,不就是求各個位上的數字然後平方和,再加個迭代就能證明它是所謂的快樂數了嘛!
然而,題目清楚地告訴我們,並不是所有的數都是快樂數。
在數字海洋裡有一些有毒性的魚兒,他們不喜歡 1 這個數字……
「不快樂數」會在這個過程中不斷迴圈,可怕的事發生了,你的驗證快樂數的程式會不斷地迴圈……最後可能還會溢位……
遇到這個問題,我第乙個想法當然是在這個迴圈過程中找到這個不快樂數,並給出判斷……
怎麼找呢?
既然它是迴圈的,那麼它一定有乙個週期,,,,,
難道我要儲存這些過程數,,,,然後乙個乙個比對嗎?
想想就不寒而慄。。。。
這得需要犧牲多少記憶體和時間。。。。
所以啊,我們換乙個思路。
好吧,墨默很笨,這個思路是參考大佬的,,,,,
大佬說,我們使用快慢指標的方法,,,,墨默孤陋寡聞,第一次聽說這個所謂的快慢指標,,,
廢話少說,先貼**:
public:
int fast=n;
int slow=n;
dowhile(slow!=fast);
if(fast==1)
return true;
else return false;
}int squaresum(int m)
return squaresum;
}
顯而易見,fast是快指標,slow是慢指標。
相應的當這個數是「快樂數」時快指標會先到達1,顯而易見,快指標到達1 之後將不再變化,慢指標最終也會到達1 ,屆時就可以終止迴圈,返回true.
墨默後來也知道了:
可憐之前並不知道啊。。。。
快慢指標解決快樂數問題
編寫乙個演算法來判斷乙個數是不是 快樂數 乙個 快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。我們的第一感官,這道題真簡單 我也是這麼想的,不就是求各個位上的...
快慢指標遍歷 202 快樂數
2.202 快樂數 編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。如果 n 是快樂數就返回 true 不是...
快樂數 快慢指標(判斷成環思路)
編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為1,那麼這個數就是快樂數。如果n是快樂數就返回true 不是,則返回false。示例 輸入 1...