C ++で指定された組み合わせを使用して、文字列(R、G、およびBで構成されている)の数をカウントします
R、G、Bの3つの数字と、「R」、「G」、「B」の文字のみが与えられます。目標は、少なくともR R、少なくともG G、および少なくともBBを使用して作成できる文字列の数を見つけることです。数値R、G、およびBの合計は、可能な文字列の長さ以下です。
例
入力
R = 1, G = 1, B = 1 length=3
出力
Count of number of strings (made of R, G and B) using given combination are − 6
説明
The possible strings will be : “RGB”, “RBG”, “BRG”, “BGR”, “GRB”, “GBR”. That is permutations of RGB.
入力
R = 2, G = 0, B = 2 length=4
出力
Count of number of strings (made of R, G and B) using given combination are − 6
説明
The possible strings will be : “RRBB”, “BBRR”, “RBRB”, “BRBR”, “RBBR”, “BRRB”.
以下のプログラムで使用されるアプローチは次のとおりです −
このアプローチでは、最初にR、B、Gの文字を何度も受け取ります。次に、残りの長さを確認します-(R + G + B)文字はすべての順列と組み合わせを作成し、カウントに追加します。
-
入力として整数値R、G、Bを取ります。
-
作成する文字列の長さとしてサイズを取ります。
-
関数の組み合わせ(int R、int G、int B、int size)はすべての入力を受け取り、指定された組み合わせを使用して(R、G、およびBで構成される)文字列の数を返します。
-
初期カウントを0とします。
-
残りのカウントをtemp=size −(R + G + B)として取ります。
-
長さsize+1の配列arrを取得して、順列の値を取得します。
-
最初に、iの階乗をarr[i]に格納します。 i=0からi=sizeまでのforループを使用します。 Setarr [i] =arr [i-1]*i。
-
組み合わせの計算では、2つのforループを使用してarr[]を再度トラバースします。
-
i =0からtemp、j =0からtemp−iの場合、temp_2 =temp −(i + j)を計算します。
-
temp_3 =arr [i + R] * arr [j + B] * arr [temp_2+G]を取ります。
-
次に、arr [size]/temp_3を追加してカウントします。
-
すべてのforループの最後に、必要な文字列の数としてカウントされます。
-
結果としてカウントを返します。
例
#include<bits/stdc++.h> using namespace std; int combination(int R, int G, int B, int size){ int count = 0; int temp = size − (R + G + B); int arr[size+1]; arr[0] = 1; for (int i = 1; i <= size; i++){ arr[i] = arr[i − 1] * i; } for (int i = 0; i <= temp; i++){ for (int j = 0; j <= temp−i; j++){ int temp_2 = temp − (i + j); int temp_3 = arr[i + R] * arr[j + B] * arr[temp_2 + G]; count += arr[size] / temp_3; } } return count; } int main(){ int R = 2, G = 1, B = 1; int size = 4; cout<<"Count of number of strings (made of R, G and B) using given combination are: "<<combination(R, G, B, size); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of number of strings (made of R, G and B) using given combination are: 12
-
C++を使用してNを25で割り切れるのに必要な所定の移動の最小数。
問題の説明 先行ゼロのない数値Nが与えられます。タスクは、Nを25で割り切れるのに必要な最小移動数を見つけることです。各移動で、隣接する2桁を入れ替えて、いつでも数値に先行ゼロが含まれていないことを確認できます。 Nを25で割り切れない場合は、-1を出力します N =5071の場合、25で割り切れるには4回の移動が必要です 5071 → 5701 → 7501 → 7510 → 7150 アルゴリズム 1. Iterate over all pairs of digits in the number. Let the first digit in t
-
C ++を使用して、xとその数字の合計が与えられたnと等しくなるような数xを見つけます。
ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i