C++でn番目の醜い数を見つけるプログラム
数nがあるとします。 n番目の醜い数を見つけなければなりません。醜い数は、素因数が2、3、5しかない数であることがわかっているので、10 th を見つけたい場合は 醜い数字の場合、出力は12になります。最初のいくつかの醜い数字は、1、2、3、4、5、6、8、9、10、12などです。
これを解決するには、次の手順に従います。
- size(n + 1)の配列vを定義します
- nが1と同じ場合、次のようになります。
- 1を返す
- 2:=2、3:=3、5:=5
- twoIdx:=2、threeIdx:=2、fiveIdx:=2
- iを初期化する場合:=2、i <=nの場合、更新(iを1つ増やす)、次のようにします。
- curr:=最低2、3、5
- v [i]:=curr
- currが2と同じ場合、次のようになります。
- two:=v [twoIdx] * 2;
- (twoIdxを1増やします)
- currが3と同じ場合、次のようになります。
- three:=v [threeIdx] * 3
- (threeIdxを1増やします)
- currが5と同じ場合、次のようになります。
- 5:=v [fiveIdx] * 5
- (fiveIdxを1増やします)
- return v [n]
理解を深めるために、次の実装を見てみましょう。
例
#include using namespace std; class Solution { public: int nthUglyNumber(int n) { vector v(n + 1); if(n == 1){ return 1; } int two = 2, three = 3, five = 5; int twoIdx = 2; int threeIdx = 2; int fiveIdx = 2; for(int i = 2; i <= n; i++){ int curr = min({two, three, five}); v[i] = curr; if(curr == two){ two = v[twoIdx] * 2;; twoIdx++; } if(curr == three){ three = v[threeIdx] * 3; threeIdx++; } if(curr == five){ five = v[fiveIdx] * 5; fiveIdx++; } } return v[n]; } }; main(){ Solution ob; cout << (ob.nthUglyNumber(15)); }
入力
15
出力
24
-
C++の醜い数II
n番目の醜い数を見つけなければならないので、それを見つけることができるメソッドを定義する必要があるとします。醜い数は素因数が2、3、5しかない数であることがわかっているので、10番目の醜い数を見つけたい場合、最初のいくつかの醜い数は1、2、3であるため、12になります。 4、5、6、8、9、10、12 これを解決するには、次の手順に従います- サイズn+1の配列vを作成します n =1の場合、1を返します 2:=2、3=3および5=5、towIndex:=2、threeIndex:=2およびfiveIndex:=2 2からnの範囲のiの場合 curr:=2、
-
数値のパリティを効率的に見つけるためのC++プログラム
この記事では、与えられた数Nのパリティを見つけるプログラムについて説明します。 パリティは、数値の2進表現におけるセットビットの数(「1」の数)として定義されます。 バイナリ表現の「1」の数が偶数の場合、パリティは偶数パリティと呼ばれ、バイナリ表現の「1」の数が奇数の場合、パリティは奇数パリティと呼ばれます。 指定された数がNの場合、次の操作を実行できます。 1) 2) 4) 8) 16) これらすべての操作が完了すると、yの右端のビットは数値のパリティを表します。ビットが1の場合、パリティは奇数になり、ビットが0の場合、パリティは偶数になります。 例 #include