C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. 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

  2. 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