2

プロジェクトオイラー#4をc#で解決しようとしていますが、以前の投稿によると、c#でこの問題の解決策を見つけることができませんでした。

質問は:

回文数はどちらの方法でも同じように読めます。2 つの 2 桁の数の積から作られる最大の回文は、9009 = 91 99 です。

2 つの 3 桁の数の積から作られる最大の回文を見つけます。

以下は私のコードですが、それがどのように流れるかを見ると、私の間違いはわかりません。どうすれば修正できますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CS_11_project_Euler_problem_4
{

class Program
{

    static void Main(string[] args)
    {
        int x, y;
        string product="" , res="";

        for (x = 100; x <= 999; x++)
        {
            for (y = 100; y <= 999; y++)
            {
                product = Convert.ToString(x*y);

                if (product == new String(product.Reverse().ToArray()))
                {
                    Console.WriteLine("X=" + x + " Y=" + y );
                    res = product;

                    Console.WriteLine("Polindrome is: " + res);
                }

                else { continue; }
            }
        }
    }
}
}

私のコードが見つけた結果は 580085 です。これが私の出力のスクリーンショットです。すべての結果の回文数とその乗数が表示されます。

ここに画像の説明を入力

projecteuler.netによると、私の結果は正しくありません。私の出力の 1 つは、実際の結果を示していました。906609 . これは、私のコードの最後の回文の前の 2 番目の結果です。ネストされた for ループ内で乗数を増やすと考えるのは間違っていたと思います。これは、意図せずに「最大の X が最大の乗数ロジックを与える」に基づいていたためです。それを防ぐために、解像度と積をもう一度整数に変換し、常により大きな積を変数積に保ちます

4

2 に答える 2

2

回文を見つけたら、 while ループ内で永遠にループしているためです。while を and if に変更すると、動作するはずです。

編集:

はい、最後に見つかった製品が最大であると単純に仮定するのではなく、これまでに見つかった最大の製品を追跡する必要があります。

于 2013-05-26T19:05:26.603 に答える