Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 숫자가 반복되는 철자를 세는 방법

<시간/>

반복되는 숫자가 많이 포함된 숫자가 문자열로 주어집니다. 목표는 그것을 철자하는 방법의 수를 찾는 것입니다. 예를 들어 112233은 이중 하나, 이중 둘 이중 3 또는 하나 하나 둘 둘 셋 셋으로 철자를 지정할 수 있습니다.

연속 숫자를 확인하여 이를 수행합니다. 숫자가 "13"인 경우 "one three"(20)로 철자하는 방법은 한 가지뿐입니다. 숫자가 "113"인 경우 "두 배 하나 셋", "하나 하나 셋"(21). 그래서 접근 방식은 문자열에서 연속된 하나의 숫자를 세고 이전 결과에 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을 사용합니다.

  • 특정 숫자의 반복 횟수로 변수 temp를 취하십시오. 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