C++でのステッピング番号
低と高の2つの整数があるとすると、[低、高]の範囲内のすべてのステッピング番号のソートされたリストを見つけて表示する必要があります。ステッピング番号は整数であり、隣接するすべての数字の絶対差が正確に1であることを意味します。たとえば、321はステッピング番号ですが、421はそうではありません。したがって、入力がlow:=0およびhigh:=21のようである場合、結果は[0,1,2,3,4,5,6,7,8,9,10,12,21]になります。
これを解決するには、次の手順に従います-
- 1つのアレイ一時を作成
- solve()という1つのメソッドを作成します。これには、high、seed、lenが必要です。 lenは最初は0です
- シードが>高い場合は、戻ります
- シードを一時配列に挿入します
- シードが0の場合、
- 1〜9の範囲のiについて、solve(high、i、1)を実行します
- それ以外の場合
- lastDigit:=seed mod 10
- lastDigit>=1かつlen+1 <=10の場合、solve(high、(seed * 10)+ lastDigit – 1、len + 1)
- lastDigit<=8かつlen+1 <=10の場合、solve(high、(seed * 10)+ lastDigit + 1、len + 1)
- 主な方法は次のようになります-
- Solve(high、0、0)
- 一時配列を並べ替える
- 1つの配列を作成します
- 0から一時サイズの範囲のiの場合– 1
- temp [i]> =lowの場合、temp[i]をansに挿入します
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } typedef long long int lli; class Solution { public: vector <lli> temp; void solve(int high,lli seed=0, int len =0){ if(seed>high){ return; } temp.push_back(seed); if(!seed){ for(int i =1;i<=9;i++){ solve(high,i,1); } } else { int lastDigit = seed%10; if(lastDigit>=1 && len+1<=10) solve(high, (seed*10) + lastDigit-1,len+1); if(lastDigit<=8 && len+1<=10) solve(high, (seed*10) + lastDigit+1,len+1); } } vector<int> countSteppingNumbers(int low, int high) { solve(high); sort(temp.begin(),temp.end()); vector <int> ans; for(int i =0;i<temp.size();i++){ if(temp[i]>=low)ans.push_back(temp[i]); } return ans; } }; main(){ Solution ob; print_vector(ob.countSteppingNumbers(0,40)); }
入力
0 40
出力
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, ]
-
C++でのエマープ番号
エマープ numberは特殊なタイプの数であり、その数字を逆にすると別の素数が作成されます(この素数は元の素数とは異なります)。 エマープは素数の逆です。 エマープではないいくつかの素数は、回文素数と1桁の素数です。 いくつかのエマープ番号 13、17、37、733です。 n未満のすべてのエマープ数を出力するプログラム。 ここでは、番号nが与えられており、すべてのemirp番号を出力する必要があります。 n以下。 問題を理解するために例を見てみましょう 入力: n =40 出力: 13、17、31、37 ソリューションアプローチ 指定された数よりも小さいすべてのエマー
-
C++でのデュードニー番号
与えられた数の底の数理論で定義された数は、最初の自然数の桁の合計が2番目の数の桁の合計に等しくなるように、別の自然数の完全な3乗に等しい自然数です。 (ウィキペディア)。 番号はヘンリー・デュードニーによって発見されました 。その数式 は- ここでは、整数nが与えられます。私たちの仕事は、与えられた番号nが人物番号であるかどうかを確認することです。 問題を理解するために例を見てみましょう 入力: N =17592 出力: いいえ 説明: 与えられた番号はダドニー番号ではありません。 ソリューションアプローチ- 解決策は、デュードニー番号の基本的な定義にあります。