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

C++で特定の数字シーケンスの可能なデコードをカウントします


数字列を表す文字列が与えられます。各桁は1から26まで英語のアルファベットとしてデコードされます。 1は「A」、2は「B」、以下同様に26までは「Z」です。目標は、特定の数字シーケンスから可能なすべてのデコードの数を見つけることです。シーケンスが「123」の場合、可能なデコードは「ABC」(1-2-3)、「LC」(12-3)、「AW」(1-23)です。カウントは3です。

例を挙げて理解しましょう。

入力 − str [] =” 1532”

出力 −特定のディジットシーケンスで可能なデコードの数は− 2

説明 −可能なデコードはAECB-(1-5-3-2)およびOCB(15-3-2)です。

入力 − str [] =” 216”

出力 −特定のディジットシーケンスで可能なデコードの数は− 3

説明 −可能なデコードは、「BAF」(2-1-6)、「UF」(21-6)、「BP」(2-16)

です。

以下のプログラムで使用されているアプローチは次のとおりです

これは、再帰的な方法を使用して行います。文字列の一部をこの再帰メソッドに渡します。

最後の桁が「0」でないかどうかを確認し、trueの場合は、0から長さ-1までの文字列の残りの部分を確認します。最後の2桁の文字列部分が1〜26の数値になるかどうかを確認します。trueの場合は、カウントを更新し、残りの文字列が0〜2の長さになるかどうかを確認します。

  • 入力を文字列str[]として取得しています。

  • 関数decode_digit_seq(char * str、int length)は、文字列とその長さを受け取り、strの可能なデコードの数を返します。

  • 長さが0の場合。1を返します。

  • 長さが1の場合。1を返します。

  • 最後の1文字がゼロ以外の場合、カウントはdecode_digit_seq(str、int length-1)

    になります。
  • 最後から2番目の文字が1の場合、最後の2桁は10から19(JからS)の間になり、カウントをcount =count + decode_digit_seq(str、length-2)

    として更新します。
  • 最後から2番目の文字が2で、最後の文字が7未満の場合、最後の2桁は20〜26(T〜Z)になり、カウントをcount =count + decode_digit_seq(str、length-2)

    として更新します。
  • これですべてのケースが取得されます。

  • 最終的に、すべての再帰が結果としてカウントを返します。

#include <iostream>
#include
using namespace std;
int decode_digit_seq(char *str, int length){
   int count = 0;
   if(length == 0){
      return 1;
   }
   if(length == 1){
      return 1;
   }
   if(str[0] == '0'){
      return 0;
   }
   if(str[length-1] > '0'){
      count = decode_digit_seq(str, length-1);
   }
   if(str[length-2] == '1'){
      count = count + decode_digit_seq(str, length-2);
   }
   if(str[length-2] == '2' && str[length-1] < '7'){
      count = count + decode_digit_seq(str, length-2);
   }
   return count;
}
int main(){
   char str[] = "7651";
   int length = strlen(str);
   cout<<"Count of Possible Decodings of a given Digit Sequence are: "<< decode_digit_seq(str, length);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of Possible Decoding of a given Digit Sequence are: 1

  1. C++のグリッドで指定された方向に可能な移動をカウントします

    サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例

  2. C++で指定されたサイズの長方形内で可能な菱形の数を数えます

    高さX幅の寸法の長方形が与えられます。長方形は、点(0,0)を左下隅に持つ2D座標系で表されます。したがって、目標は、これらすべての条件が満たされるように、この長方形内で可能な菱形の数を数えることです- ひし形の面積は0を超えています。 ひし形の対角線はx軸とy軸に平行です。 ひし形には、すべてのコーナーの整数座標があります。 例を挙げて理解しましょう 入力 −長さ=3幅=3 出力 −指定されたサイズの長方形内で可能な菱形の数は次のとおりです。4 説明 −下の図には、height =width=3の長方形があります。また、面積が0を超え、対角線が両方の軸に平行(