C#でプロジェクトオイラーを解く(問題38「パンデジタル倍数」)

プロジェクトオイラー
Pocket

どーも、みつおです。

問題

192 に 1, 2, 3 を掛けてみよう.

192 × 1 = 192
192 × 2 = 384
192 × 3 = 576

積を連結することで1から9の パンデジタル数 192384576 が得られる. 192384576 を 192 と (1,2,3) の連結積と呼ぶ.

同じようにして, 9 を 1,2,3,4,5 と掛け連結することでパンデジタル数 918273645 が得られる. これは 9 と (1,2,3,4,5) との連結積である.

整数と (1,2,…,n) (n > 1) との連結積として得られる9桁のパンデジタル数の中で最大のものはいくつか?

出典:Problem38

解答

using System;
using System.Linq;

namespace Problem38
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            Console.ReadLine();
        }

        private static int Solve()
        {
            int ret = 0;
            int num = 0;
            string strnum = "";

            //パンデジタル判定式
            Predicate<string> IsPandigi = A => A.OrderBy(B => B).SequenceEqual("123456789");

            //掛ける数
            for (int i = 1; i <= 9999; i++)
            {
                //初期化
                strnum = "";

                //掛けられる数
                for(int j = 1;j <= 9;j++)
                {
                    //連結積
                    strnum += (i * j).ToString();

                    //文字列が9を超えてたらループ終了 9以下なら連結積をもう一度求める
                    if (9 < strnum.Length) break;
                    else if (strnum.Length < 9) continue;

                    //パンデジタル判定
                    if(IsPandigi(strnum))
                    {
                        num = int.Parse(strnum);

                        //パンデジタル数の最大値判定
                        if (ret < num) ret = num;
                    }
                }
            }

            return ret;
        }
    }
}

 

出力

932718654

コメント

タイトルとURLをコピーしました