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