0
int Cnt(){
    return Count (10);
}

int Count (int init){
    int u = init % 10;
    int t = (init % 100) - u;
    int u2 = u * u;
    int t2 = t * t;
    int m = u2 + t2;
    if(m <= 1)
        System.out.println("Happy!");
    else {
        return Count (m);
    }

このコードは (理論的には) number がHappyかどうかをチェックし、そうでない場合は初期値を結果と同じに設定し、プロセス全体を繰り返します。number が満たされない場合、無限ループが発生するはずです。ただし、これは何も起こりません。これを機能させる方法を知っている人はいますか?

4

4 に答える 4

0

これは宿題なので答えは入れていません...でもここに手がかりがあります。

あなたは3桁の数字をうまく扱っていません。

t=init%100-uに計算します10%100-0 = 10

そして、m=u2+t2iem=0+100に到達する100と、プログラムは3桁の数字を処理しません。お役に立てれば。

以下を追加...

int h = init/100;
int h2 = h * h;
int m = u2+t2+h2;

そしてそれはあなたを続けるはずです...:)

于 2012-07-29T18:51:08.607 に答える
0

リンクした Wiki の記事によると、各数字の桁数を合計するプロセスを繰り返す必要があります。7 の例:

7^2 = 49
49  = 4^2 + 9^2 = 16 + 81 = 97
97  = 9^2 + 7^2 = 81 + 49 = 130
130 = 1^2 + 3^2 = 10
10  = 1^2 = 1

あなたのコードにはいくつか問題があります。まず、10 の桁を 10 で割っていません。つまり、52 の場合、5 ではなく、u = 2、t = 50 になります。この部分は、簡単に修正できると思います。

第二に、あなたの数が不幸な場合、決して結論に達しないように見えます. たとえば、数値 4 を使用すると、16、37、72、53、34、25、29、85、89、145、42、20、4 に到達します。ループに入ると、メモリがなくなるまで実行されます。

于 2012-07-29T18:55:33.593 に答える
0

参照した記事で概説されているアプローチを使用してみてください。

private static boolean isHappy(int number)
{
   List<Integer> set = new ArrayList<Integer>();

   while (number > 1 && !set.contains(number))
   {
       set.add(number);

       number = sumSquaresOfDigits(number);
   }

   return number == 1;
}

private static int sumSquaresOfDigits(int number)
{
    String numberString = Integer.toString(number);

    int result = 0;

    for (char character : numberString.toCharArray())
    {
        int digit = Character.digit(character, 10);

        result += digit * digit;
    }

    return result;
}

これは、10 桁すべて (0 ~ 9) の 2 乗を計算し、結果を整数配列に格納することで、より効率的に実行できます。

于 2012-07-29T19:21:41.807 に答える
0
import java.io.*;
class happy_no
{
    void happy(double n)
    {
        int c=0;
        double s=0;
        double d,p,i,_sa;
        for(i=1;i<=n;i++)
        {
            while(n!=0)
            {
                d=n%10;
                p=d*d;
                s=s+p;
                n=n/10;
            }
            if(s==1)
            {
                System.out.println("HAPPY NO.");
                break;
            }
            else
            {
                n=s;
            }
        }
    }
    public static void main()throws IOException
    {
        InputStreamReader read=new InputStreamReader(System.in);
        BufferedReader in=new BufferedReader(read);
        double a;
        System.out.println("ENTER A NO.");
        a=Double.parseDouble(in.readLine());
        happy_no obj=new happy_no();
        obj.happy(a);
    }
于 2015-02-03T08:57:38.860 に答える