C++で数字が繰り返される数字を綴る方法を数える
文字列として多くの繰り返し桁を含む番号が与えられます。目標は、それを綴る方法の数を見つけることです。たとえば、112233は、double one、double 2 double 3、または1 1 2 2 33のように綴ることができます。
これを行うには、連続数をチェックします。数字が「13」の場合、「1つ3」(20)と綴る方法は1つしかありません。数字が「113」の場合、「ダブルワンスリー」、「ワンワンスリー」(21)。したがって、アプローチは、文字列内の1つの連続した数字をカウントし、2(count-1)に前の結果を掛けることです。
例を挙げて理解しましょう。
入力
num=”11211”
出力
Count of ways to spell a number with repeated digits are: 4
説明
ways are: 1. One one two one one 2. Double one two one one 3. One one two double one 4. Double one two double one
入力
num=”2212”
出力
Count of ways to spell a number with repeated digits are: 2
説明
ways are: 1. Two two one two 2. Double two one two
以下のプログラムで使用されているアプローチは次のとおりです
-
数値を表すために文字列strを使用しています。
-
関数word_spell(string str)は、strの数値を受け取り、それを綴る方法を返します。
-
このような方法では、初期変数カウントを0とします
-
各桁のforループトラバースstrを使用します。
-
特定の桁の繰り返し数として可変温度を取ります。 str [i] ==str [i + 1]の場合は、温度を上げます。
-
count =count * pow(2、temp-1)
を計算します -
結果として最後にリターンカウント。
例
#include<bits/stdc++.h> using namespace std; long long int word_spell(string str){ long long int count = 1; int len = str.length(); for (int i=0; i<len; i++){ int temp = 1; while(i < len-1 && str[i+1] == str[i]){ temp++; i++; } count = count * pow(2, temp-1); } return count; } int main(){ string str = "222211"; cout<<"Count of ways to spell a number with repeated digits are: "<<word_spell(str); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of ways to spell a number with repeated digits are: 16
-
C++で一意の桁を持つ数を数える
非負の整数nがあるとします。一意の数字xを持つすべての数値をカウントする必要があります。xは0〜10^nの範囲です。したがって、数値nが2の場合、11、22、33、44、55、66、77、88、99なしで0から100までの数値を検索するため、結果は91になります。 これを解決するには、次の手順に従います- nが0の場合、1を返します n:=最小10およびn nが1の場合、10を返します ans:=9およびret:=10 2からnの範囲のiの場合 ans:=ans *(9 – i + 2) ret:=ret + ans retを返す
-
C ++で数字の配列として表される数値に1を追加しますか?
配列として表される数値は、数値の各桁を配列の1つの要素に格納します。配列の長さは、配列の桁数と同じです。つまり、4桁の数値の場合は長さ=3です。配列の各要素は1桁の数字です。数値は、最後の要素が数値の最下位桁を格納するように格納されます。そして、最初の要素は数値の最上位桁を格納します。たとえば、 番号-351932は{3,5,1,9,3,2}として保存されます この数に1を追加するには、配列の最後の要素に1を追加する必要があり、キャリーを伝搬する必要があるかどうかをチェックします。最後のビットの数値が9の場合、キャリーが伝搬され、最後の要素の値は0になります。 次にビットが伝搬されると、