0

ハッピーナンバーは以下のプロセスで定義されます。任意の正の整数から始めて、数字をその数字の 2 乗の合計で置き換え、数字が 1 になるまでこのプロセスを繰り返します。

しかし、number がハッピー ナンバーでない場合、1 を含まないサイクルで無限にループします。

私はpythonで幸せな数の問題をコーディングしましたが、問題は数字が幸せではない場合、どうすれば反復サイクルを停止できますか. 1 で終わらず、繰り返し続けるからです。

def happynumber(number):

while(number!=1):
    numberstr = str(number) #converting a number to string
    index=0 
    sum=0
    while(index!=len(numberstr)):
        sum = sum + int(numberstr[index])*int(numberstr[index])
        index = index+1
    print sum

    number = sum
return number
4

4 に答える 4

16

一定量のメモリで不幸な数を検出できます。Wikipediaによると、任意の正の整数の開始点について、シーケンスは 1 で終了するか、 で永久にループします4, 16, 37, 58, 89, 145, 42, 20, 4。他のループが存在しないため、不幸をテストするのは簡単です。

def isHappy(x):
    while True:
        if x == 1:
            return True
        if x == 4:
            return False
        x = nextNumberInSequence(x)
于 2012-10-01T15:10:26.467 に答える
8

シーケンスでこれまでに作成したすべての数値の記録を保持する必要があります。そのうちの 1 つが 2 回目に出てきた場合、1到達することのないループがあることがわかります。数字を格納する場所。

于 2012-10-01T14:54:12.847 に答える
2

現在の数値が 3 桁を超えている限り、その値は次の反復で減少します。数値が 3 桁の場合、次の反復で取り得る最大値は 3*81 <= 250 です。したがって、サイズ 250 の配列を使用し、250 未満のシーケンス内のすべての数値を記録します。その後、簡単にできます。重複があるかどうかを検出します。

于 2012-10-01T14:58:51.467 に答える