C++でn個の変数の線形方程式の解の数を見つけます
この問題では、次の形式のn変数の線形方程式が与えられます。
coeff1(var1) + coeff2(var2) + … + coeffn(varn) = value
n個の変数の線形方程式の解の数を見つけます。
問題を理解するために例を見てみましょう
入力
coeff[] = {3, 1}, value = 4
出力
1
説明
Equation : 3x + y = 4. Solution, x = 0, y = 4.
ソリューションアプローチ
この問題の簡単な解決策は、方程式の値を評価することです。次に、再帰的に呼び出して値を更新します。値が0の場合、ソリューションカウントは1です。それ以外の場合は、係数値を減算して値を繰り返します。
ソリューションの動作を説明するプログラム
例
#include<iostream> using namespace std; int countSolutionsEq(int coeff[], int start, int end, int value) { if (value == 0) return 1; int coefCount = 0; for (int i = start; i <= end; i++) if (coeff[i] <= value) coefCount += countSolutionsEq(coeff, i, end, value - coeff[i]); return coefCount; } int main() { int coeff[] = {3, 5, 1, 2}; int value = 6; int n = sizeof(coeff) / sizeof(coeff[0]); cout<<"The number of solutions of the linear equation is "<<countSolutionsEq(coeff, 0, n - 1, value); return 0; }
出力
The number of solutions of the linear equation is 8
-
C++で最大Nまでのログを計算するために必要なログ値の最小数を見つけます
log(x * y)=log(x)+ log(y)であることがわかっています。したがって、1からNまでのすべてのログ値を計算するために必要なログ値の最小数を確認します。したがって、Nが6の場合、log(1)からlog(6)のように、出力は3になります。 log(1)を除いて、3つのログ値が必要です。 log(1)は常に0であるため、無視します。ここで、log(2)とlog(3)について、を見つける必要があります。その後、log(4)の場合はlog(2)+ log(2)になりますが、log(2)の値がわかっているため、これを再度計算することはありません。log(5)の場合は計算する必要があります
-
C++で数値の最上位セットビットを検索します
ここでは、数値が指定されているかどうか、次に設定されている最上位ビット値の値を見つける方法を確認します。値は2の累乗です。したがって、数値が10の場合、MSB値は8になります。 MSBの位置を見つけてから、k番目の位置にビットを設定して数値の値を見つける必要があります。 例 #include<iostream> #include<cmath> using namespace std; int msbBitValue(int n) { int k = (int)(log2(n)); return (int)(pow(2