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

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

  1. 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を返す

  2. C ++で数字の配列として表される数値に1を追加しますか?

    配列として表される数値は、数値の各桁を配列の1つの要素に格納します。配列の長さは、配列の桁数と同じです。つまり、4桁の数値の場合は長さ=3です。配列の各要素は1桁の数字です。数値は、最後の要素が数値の最下位桁を格納するように格納されます。そして、最初の要素は数値の最上位桁を格納します。たとえば、 番号-351932は{3,5,1,9,3,2}として保存されます この数に1を追加するには、配列の最後の要素に1を追加する必要があり、キャリーを伝搬する必要があるかどうかをチェックします。最後のビットの数値が9の場合、キャリーが伝搬され、最後の要素の値は0になります。 次にビットが伝搬されると、