C++のスーパーパリンドローム
正の整数Nがあるとします。これは、回文の場合はスーパーパリンドロームと呼ばれ、回文の2乗でもあります。ここで、2つの正の整数LとRがあると考えて、[L、R]の包括的範囲内のスーパーパリンドロームの数を見つける必要があります。
したがって、入力がL=5およびR=500のような場合、出力は3になり、スーパーパリンドロームは9、121、484になります。
これを解決するには、次の手順に従います-
-
関数helper()を定義します。これには、x、m、M、lb、ub、
が必要です。 -
x> ubの場合、-
-
戻る
-
-
x> =lbであり、(x * x)が回文である場合、-
-
(ansを1増やします)
-
-
初期化i:=1の場合、m + 2 * i <=Mの場合、更新(iを1増やします)、次のようにします。
-
W:=10 ^(m + 2 * i-1)
-
w:=10 ^ i
-
zを初期化する場合:=1、z <=9の場合、更新(zを1つ増やす)、実行-
-
helper(z * W + x * w、m + 2 * i、M、lb、ub)
-
-
-
メインの方法から、次のようにします-
-
lb:=Lの平方根、ub:=Rの平方根
-
M:=ubベース10+1のログを実行
-
初期化z:=0の場合、z <=9の場合、更新(zを1増やします)、do-
-
helper(z、1、M、lb、ub)
-
ヘルパー(11 * z、2、M、lb、ub)
-
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { int ans = 0; public: int superpalindromesInRange(string L, string R){ long double lb = sqrtl(stol(L)), ub = sqrtl(stol(R)); int M = log10l(ub) + 1; for (int z = 0; z <= 9; z++) { helper(z, 1, M, lb, ub); helper(11 * z, 2, M, lb, ub); } return ans; } private: void helper(long x, int m, int M, long double lb, long double ub){ if (x > ub) return; if (x >= lb && is_palindrome(x * x)) ans++; for (int i = 1; m + 2 * i <= M; i++) { long W = powl(10, m + 2 * i - 1) + 1; long w = powl(10, i); for (int z = 1; z <= 9; z++) helper(z * W + x * w, m + 2 * i, M, lb, ub); } } bool is_palindrome(long x){ if (x == 0) return true; if (x % 10 == 0) return false; long left = x, right = 0; while (left >= right) { if (left == right || left / 10 == right) return true; right = 10 * right + (left % 10), left /= 10; } return false; } }; main(){ Solution ob; cout << (ob.superpalindromesInRange("5", "500")); }
入力
"5", "500"
出力
3
-
C++の識別子
C ++識別子は、変数、関数、クラス、モジュール、またはその他のユーザー定義アイテムを識別するために使用される名前です。識別子は、文字AからZまたはaからzまたはアンダースコア(_)で始まり、その後に0個以上の文字、アンダースコア、および数字(0から9)が続きます。 C ++では、識別子内に@、$、%などの句読文字を使用できません。 C ++は、大文字と小文字を区別するプログラミング言語です。したがって、Manpowerとmanpowerは、C++では2つの異なる識別子です。 受け入れ可能な識別子の例を次に示します- mohd Piyush abc move_na
-
LinuxでのC++の最高のIDEは何ですか?
大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。 Linux上のC++に最適なIDEは1つではありません。ツールは賢く選ぶ必要があります。 Linux用の人気のあるIMOの最高のIDEのリストは次のとおりです。 C /C++開発用のNetbeans- Netbeansは、C /C++および他の多くのプログラミング言語向けの無料のオープンソースで人気のあるクロスプラットフォームIDEです。コミュニテ