C++でn番目のエルミート番号を見つける
この問題では、整数値Nが与えられます。私たちのタスクは、n番目のエルミート数を見つけるプログラムを作成することです。
ハーマイト番号 は数値であり、引数が0の場合のエルミート数の値です。
Nth hermite Number is HN = (-2) * (N - 1) * H(N-2) The base values are H0 = 1 and H0 = 0.
エルミートシーケンスは、-1、0、-2、0、12、0、-120、0、1680、0…です。
問題を理解するために例を見てみましょう
入力
N = 7
出力
0
入力
N = 6
出力
-120
ソリューションアプローチ
この問題の簡単な解決策は、エルミート数の式を使用することです。これは再帰を使用して行われ、N th を見つけることができます。 期間。
ソリューションの動作を説明するプログラム
例
#include <iostream> using namespace std; int calcNHermiteNumber(int N) { if (N == 0) return 1; if (N % 2 == 1) return 0; else return -2 * (N - 1) * calcNHermiteNumber(N - 2); } int main() { int N = 10; cout<<"The "<<N<<"th hermite Number is "<<calcNHermiteNumber(N); return 0; }
出力
The 10th hermite Number is -30240
効率的なアプローチ
問題を解決するための効率的なアプローチは、式を使用することです。再帰式を使用して一般式を導出できます。
ここで、Nの値が奇数の場合、エルミート数は0です。
Nの値が偶数の場合、それらは式で定義された値になります。
HN = ( (-1)(N/2)) * ( 2(N/2) ) * (N-1)!!
(N-1)!! (n-1)*(n-3)* ... 3*1として計算される半階乗です。
ソリューションの動作を説明するプログラム
例
#include <iostream> #include <math.h> using namespace std; int calcSemiFact(int n) { int factVal = 1; for (int i = 1; i <= n; i = i + 2) { factVal *= i; } return factVal; } int calcNHermiteNumber(int n) { if (n % 2 == 1) return 0; int HermiteNumber = (pow(2, n / 2)) * calcSemiFact(n - 1); if ((n / 2) % 2 == 1) HermiteNumber *= -1; return HermiteNumber; } int main() { int N = 10; cout<<"The "<<N<<"th hermite Number is "<<calcNHermiteNumber(N); return 0; }
出力
The 10th hermite Number is -30240
-
C++で有理数のLCMを見つける
ここでは、有理数のLCMを見つける方法を説明します。有理数のリストがあります。リストが{2/7、3 / 14、5 / 3}のようであるとすると、LCMは30/1になります。 この問題を解決するには、すべての分子のLCMを計算し、次にすべての分母のgcdを計算し、次に有理数のLCMを計算する必要があります- $$ LCM =\ frac {LCM \:of \:all \:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠} {GCD \:of \:all \:𝑑𝑒𝑛𝑜𝑚𝑖𝑖 例 #include <iostream> #include <vector> #inc
-
C++のCHAR_BIT
CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() { int x = 28; int a = CHAR_BIT*sizeof(x); stack<bool> s; cout << "T