반복되는 숫자가 많이 포함된 숫자가 문자열로 주어집니다. 목표는 그것을 철자하는 방법의 수를 찾는 것입니다. 예를 들어 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