C++のストロボグラマティックナンバーII
長さがnであるとします。長さnのすべてのストロボグラマティック数を見つける必要があります。
ストロボグラマティック数は、180度回転したときに同じように見える数であることがわかっています。
したがって、入力がn =2の場合、出力は["11"、 "69"、 "88"、 "96"]
になります。これを解決するには、次の手順に従います-
-
配列retを定義する
-
nが奇数の場合、-
-
retの最後に「0」を挿入します
-
retの最後に「1」を挿入します
-
retの最後に「8」を挿入します
-
-
それ以外の場合
-
retの最後に空白の文字列を挿入します
-
-
n> 1の場合、n:=n-2を更新し、-
-
アレイの温度を定義する
-
初期化i:=0の場合、i
-
s:=ret [i]
-
n> 3の場合、-
-
tempの最後に「0」連結s連結「0」を挿入します
-
-
tempの最後に「1」連結s連結「1」を挿入します
-
tempの最後に「8」連結s連結「8」を挿入します
-
tempの最後に「6」連結s連結「9」を挿入します
-
tempの最後に「9」連結s連結「6」を挿入します
-
-
ret:=temp
-
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#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; } class Solution { public: vector<string< findStrobogrammatic(int n) { vector<string< ret; if (n & 1) { ret.push_back("0"); ret.push_back("1"); ret.push_back("8"); } else { ret.push_back(""); } for (; n > 1; n -= 2) { vector<string< temp; for (int i = 0; i < ret.size(); i++) { string s = ret[i]; if (n > 3) { temp.push_back("0" + s + "0"); } temp.push_back("1" + s + "1"); temp.push_back("8" + s + "8"); temp.push_back("6" + s + "9"); temp.push_back("9" + s + "6"); } ret = temp; } return ret; } }; main(){ Solution ob; print_vector(ob.findStrobogrammatic(3)); }
入力
3
出力
[101, 808, 609, 906, 111, 818, 619, 916, 181, 888, 689, 986, ]
-
C++での質素な数
この問題では、正の整数Nが与えられます。私たちのタスクは、与えられた数が質素な数であるかどうかをチェックするプログラムを作成することです。 不正な番号 −指定された数の素因数分解の桁数よりも厳密に桁数が多い数。 例 − 625、数625の素因数は5 4です。 。 625の桁数は3です。 5 4の桁数 は2です。 3は厳密に2より大きくなります。したがって、625は質素な数です。 最初のいくつかの質素な数は − 125、128、243、256、343、512、625など。 問題を理解するために例を見てみましょう Input: n = 128 Output: Frugal n
-
C++五胞体数
五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと