C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で最大のパリンドローム製品


nを入力したとすると、2つのn桁の数値の乗算を使用して作成できる最大の回文を見つける必要があります。数値が非常に大きいため、1337を使用してmodを実行できます。したがって、入力が2の場合、答えは987、987 =(99 * 91)mod 1337 =9009 mod 1337=987になります。

これを解決するには、次の手順に従います-

  • maxVal:=10 ^ n – 1
  • minVal:=maxVal / 10
  • hを初期化する場合:=maxVal、h> minValの場合、更新(hを1つ減らす)、実行-
    • 左:=h、右:=0
    • 初期化i:=hの場合、i> 0の場合、右=右* 10 + i mod 10、左:=左* 10、i:=i / 10、do −
        を更新します。
      • x:=左+右
      • iを初期化する場合:=maxVal、i> minValの場合、更新(iを1つ減らす)、実行-
        • i
        • ループから抜け出す
      • x mod iが0と同じ場合、-
        • return x mod 1337
  • 9を返す
  • 理解を深めるために、次の実装を見てみましょう-

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long int lli;
    class Solution {
    public:
       int largestPalindrome(int n) {
          int maxVal = pow(10, n) - 1;
          int minVal = maxVal / 10;
          for(int h = maxVal; h > minVal; h--){
             lli left = h;
             lli right = 0;
             for(lli i = h; i > 0; right = right * 10 + i % 10, left*= 10, i/= 10);
             lli x = left + right;
             for(int i = maxVal; i > minVal; i--){
                if(i < x / i) break;
                if(x % i == 0) return x % 1337;
             }
          }
          return 9;
       }
    };
    main(){
       Solution ob;
       cout << (ob.largestPalindrome(3));
    }

    入力

    3

    出力

    123

    1. C++で次の回文素数を見つける

      この問題では、要素Nが与えられます。次の回文素数を見つける必要があります。 問題の説明 − Nより大きい、回文数でもある最小の素数を見つける必要があります。 回文数は、両方向で同じ数の数です。 素数は、その唯一の要素が1とそれ自体である場合の数です。 問題を理解するために例を見てみましょう 入力 N = 12 出力 101 説明 12を超える一連の回文は、22、33、44、55、66、77、88、99、101です。これらのうち最小の回文は101です。 ソリューションアプローチ この問題の簡単な解決策は、素数であるNより大きいすべての回文を見つけることです。 より効率的な解決策は

    2. C++で最大のBSTサブツリー

      二分木があるとしましょう。その中で最大のサブツリーを見つける必要があります。ここで、最大とは、ノードの数が最も多いサブツリーを意味します。 したがって、入力が次のような場合、 この場合、最大のBSTサブツリーが強調表示されているため、出力は3になります。 これを解決するには、次の手順に従います- データと呼ばれる1つの構造を定義します。サイズ、maxVal、minVal、okの4つの値があり、okはtrue/falseの値のみを保持できます 解決(TreeNode *ノード) ノードがnullの場合、&miuns; 初期化してデータを返す(0、無限大、-無