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が左側のサブツリーに存在する場合は、右側