0

親愛なる友人:

  • 文字列と同様に、一部の数値も回文です。例: 1、2、3、4、5、6、7、8、9、11、22、33、...、101、111、...、753537、...など。

  • ユーザーの入力に応答するために、最初の 10.000 個の回文数を見つける方法を考える必要があります1 から 10000 番目の回文数まで。 たとえば、ユーザーが 12 と入力した場合、1 から 10.000 までの 12 番目の回文数は何ですか?

  • 入力は一連の行で構成され、各行には 1 つの整数値 i (1 <= i <= 10000) が含まれます。この整数値 i は、出力に書き込まれる回文数のインデックスを示します。ここで、インデックス 1 は最初の回文数 (1) を表し、インデックス 2 は 2 番目の回文数 (2) を表し、以下同様です。

元:

入力 1 --> 出力は次のようになります: 1

入力 12 --> 出力: 33

入力 24 --> 出力: 151

    import java.util.Scanner;

    public class xth_palindrome
    {
        // Some Code may be here

        public static void main(String[] args)
        {
            @SuppressWarnings("resource")
            Scanner read = new Scanner(System.in);
            System.out.println("Enter values as much as you want. To stop Enter \"0\" ");

            int Xth;

            do
            {
                Xth = read.nextInt();

                // Some coding here 

                System.out.println(Xth + " palindromic num is " + "????");

            } while(Xth != 0);
        }
    }
  • ちなみに制限時間は1秒。 これらの要因を考慮して、この問題を解決するための正しいアルゴリズムは何ですか? あなたが私を助けて、Javaで賢明なソリューションコードを示すことができれば、とても感謝しています. チェックしてくれてありがとう!
4

2 に答える 2

0

回文を非常に迅速に繰り返すことができます。ご了承ください

  1. 奇数の回文 ABCBA がある場合、次に大きい回文は D=C+1 の ABDBA になります。

  2. 偶数の回文 ABCCBA がある場合、次に大きい回文は D=C+1 の場合に ABDDBA になります。

理由は簡単です。他の数値でも MSB が増加するため、次に高い回文の中央が変化します。

ここで、C = 9 の場合、B をインクリメントし、C を 0 にリセットして、E=B+1 の場合に AE0EA および AE00EA にする必要があります。このメソッドは簡単に拡張でき、回文を反復処理できます。最大で 10,000 個を見つける必要があるため、反復アプローチには 1 秒で十分です。

于 2014-12-03T22:05:35.597 に答える