C++で次の回文素数を見つける
この問題では、要素Nが与えられます。次の回文素数を見つける必要があります。
問題の説明 − Nより大きい、回文数でもある最小の素数を見つける必要があります。
回文数は、両方向で同じ数の数です。
素数は、その唯一の要素が1とそれ自体である場合の数です。
問題を理解するために例を見てみましょう
入力
N = 12
出力
101
説明
12を超える一連の回文は、22、33、44、55、66、77、88、99、101です。これらのうち最小の回文は101です。
ソリューションアプローチ
この問題の簡単な解決策は、素数であるNより大きいすべての回文を見つけることです。
より効率的な解決策は、11の倍数である偶数桁の回文を見つけることです。
これがこのソリューションの証拠です
11% 11 = 0 1111% 11 = 0
これを使用すると、数字が偶数の回文が見つかります-
xyzzyx%11 =0、これによりすべての偶数桁が回文ではなくなります。
ソリューションの動作を説明するプログラム
例
#include <iostream> #include <string> using namespace std; bool isPrime(int num) { if (num < 2 || num % 2 == 0) return num == 2; for (int i = 3; i * i <= num; i += 2) if (num % i == 0) return false; return true; } int primePalindrome(int N) { if (8 <= N && N <= 11) return 11; for (int x = 1; x < 100000; ++x) { string s = to_string(x), r(s.rbegin(), s.rend()); int y = stoi(s + r.substr(1)); if (y >= N && isPrime(y)) return y; } return -1; } int main() { int N = 432; cout<<"The next prime palindrome is "<<findNextPrimePallindrome(432); return 0; }
出力
The next number with same set of digits is 92543
-
C++の配列で次の小さい方から次の大きい方を検索
この問題では、n個の整数値で構成される配列arr[]が与えられます。私たちのタスクは、配列内で次の小さいものを見つけることです。 問題の説明 −配列内の現在の要素よりも大きい要素を見つけてから、この大きい要素よりも小さい要素を配列内で見つけます。そして、配列に次に小さい要素または次に大きい要素が存在しない場合は、-1を返します。 問題を理解するために例を見てみましょう 入力 arr[] = {4, 2, 8, 3, 9, 1} 出力 {3, 3, 1, 1, -1, -1} 説明 次に大きい要素の配列:{8、8、9、9、-1、-1} 9は配列の最大の要素であり、1は最後の要素であるため
-
C++で特定のキーの次の右ノードを検索します
この問題では、バイナリツリーBTとキー値が与えられます。私たちのタスクは、特定のキーの次の正しいノードを見つけることです。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。 問題を理解するために例を見てみましょう 入力 key = 4 出力 5 説明 ノード4の隣の要素は5です。 ソリューションアプローチ この問題の簡単な解決策は、レベル順トラバーサルを使用してバイナリツリーをトラバースすることです。そして、与えられたキー値について、トラバーサルの同じレベルでノードの隣にノードが存在するかどうかを確認します。はいの場合は次のノードを返し、そうでない場合