200 判斷乙個數是不是快樂數

2021-10-19 13:27:57 字數 1161 閱讀 9372

題目如下:

編寫乙個演算法來判斷乙個數 n 是不是快樂數。

快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。

如果 n 是快樂數就返回 true ;不是,則返回 false 。

示例:

輸入:19

輸出:true

解釋:1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

使用快慢指標的方法來進行判斷

為什麼要使用快慢指標呢?

1、快慢指標是快指標走兩步,慢指標走一步,假如有環的話,那麼快慢指標一定會在某乙個位置相遇的,所以快慢指標經常使用來判斷鍊錶中是否存在環的情況,假如沒有環快指標與慢指標是無法相遇在某個位置的。

2、對於這道題目來說,快指標走兩步,也就是計算兩次平方和,慢指標走一次計算一次平方和,假如輸入的數字是快樂數,那麼一定是不存在環的,無環的情況下,快指標的結果最後一定是到達最終的數字1的(怎麼樣計算都是1),這個時候當慢指標追上快指標的時候一定會相遇在1,這個時候判斷迴圈退出之後兩個相遇的位置是否是1,即可判斷是否是快樂數。

3、當不是快樂數的時候,快慢指標也會相遇,因為怎麼樣平方計算都不會到達1,因為這中間存在著重複的數字而且是永遠到達不了1的,所以存在環,兩者一定會在某乙個位置上相遇並且相遇的位置一定不是1,所以可以判斷其不是快樂數。

**如下:

#include

intfunc

(int x)

return sum;}(

int n)

//判斷是否是快樂數

while

(fast != slow)

;return slow ==1;

}int

main()

執行截圖如下:

編寫乙個演算法判斷乙個數是不是「快樂數」。

乙個 快樂數 的定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為1,也可能是無限迴圈但始終變不到1.如果可以變為1,那麼這個數就是快樂數。例項 輸入 19 輸出 true 解釋 1 2 9 2 82 8 2 2 2 68 6 2 8 2 100 1...

LintCode判斷乙個數是不是回文數

判斷乙個數是不是回文數 我的想法是先將數字變成陣列,然後設定兩個指標分別從開頭和末尾一一比對.話不多說,如下 package com.yangshunfan.lintcode 判斷乙個數是不是回文數 public class huiwenshu 設定兩個指標 int left 0 int right...

如何判斷乙個數是不是完全平方數

在不使用浮點函式sqrt的情況下,我們有一些比較好的演算法 1.利用恒等式 1 3 5 7 2 n 1 n 2 bool issqrt intn 下面是一些關於完全平方數的數學性質 對排除完全平方數有一定的加速作用 性質1 完全平方數的末位數只能是0,1,4,5,6,9。性質2 奇數的平方的個位數字...