C++で最も近い回文を見つける
数nがあるとすると、回文である最も近い数を取得する必要があります。したがって、回文は、絶対差が小さい数よりも少ないか、多い可能性があります。したがって、数値が145のような場合、結果は141になります。
これを解決するには、次の手順に従います-
- sn:=nのサイズ
- snが1と同じ場合、-
- n [0]を1減らし、サイズn[0]の1の文字列を返します
- half_sn:=(sn + 1)/ 2
- half_val:=stol(インデックス0からhalf_snまでのnの部分文字列
- 配列候補を定義する={10^(sn)– 1、10 ^(sn-1)-1、10 ^(sn-1)+ 1、10 ^(sn)+1
- 配列を定義するfmdc={half_val、half_val-1、half_val + 1}
- fmdsの値cごとに
- rev:=cを文字列に変換
- sn mod 2がゼロ以外の場合、-
- revから最後の要素を削除
- アレイのリビジョンを逆にする
- 候補の最後にcを挿入
- アレイ候補を並べ替える
- val:=n as integer
- 候補者の候補者ごとに-
- 候補がvalと同じ場合、-
- 次の部分を無視し、次の反復にスキップします
- diff:=abs | candidate – val |
- diff
- min_diff:=diff
- ans:=候補を文字列に変換
- 候補がvalと同じ場合、-
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: string nearestPalindromic(string n) { int sn = n.size(); if(sn == 1){ return string(1, --n[0]); } int half_sn = (sn+1)/2; long half_val = stol(n.substr(0, half_sn)); vector<long> candidates = {pow(10, sn)-1, pow(10, sn-1)-1, pow(10, sn-1)+1, pow(10, sn)+1}; vector <long> fmdc = {half_val, half_val-1,half_val+1}; for(long c:fmdc){ string rev = to_string(c); if(sn%2)rev.pop_back(); reverse(rev.begin(),rev.end()); candidates.push_back(stol(to_string(c) + rev)); } sort(candidates.begin(), candidates.end()); string ans; long val = stol(n), min_diff = INT_MAX; for(long candidate : candidates){ if(candidate == val)continue; long diff = labs(candidate - val); if(diff < min_diff){ min_diff = diff; ans = to_string(candidate); } } return ans; } }; main(){ Solution ob; cout << (ob.nearestPalindromic("145")); }
入力
“145”
出力
141
-
C++で平行四辺形の面積を見つけるプログラム
この問題では、平行四辺形の底と高さを表す2つの値が与えられます。私たちのタスクは、C++で平行四辺形の領域を見つけるプログラムを作成することです。 平行四辺形 は、反対側が等しく平行な4辺の閉じた図形です。 問題を理解するために例を見てみましょう 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積=B* H =20 * 15 =300 ソリューションアプローチ この問題を解決するために、平行四辺形の面積の幾何学的公式を使用します。 Area = base * height. ソリューションの動作を説明するプログラム 例 #include <io
-
C++の二分木で最も近い葉を見つけます
1つの二分木が与えられたとします。さまざまなレベルのリーフノードがあります。ノードを指す別のポインターが与えられます。尖ったノードから最も近いリーフノードまでの距離を見つける必要があります。ツリーが以下のようであると考えてください- ここで、リーフノードは2、-2、および6です。ポインタがノード-5を指している場合、-5から最も近いノードは距離1になります。 これを解決するために、指定されたノードをルートとするサブツリーをトラバースし、サブツリー内で最も近いリーフを見つけて、距離を保存します。ここで、ルートからツリーをトラバースします。ノードxが左側のサブツリーに存在する場合は、右側