입력으로 숫자 N이 제공됩니다. N에 대해 두 가지 작업을 수행하고 프로세스에서 생성된 고유 숫자의 개수를 식별합니다. 단계는 -
-
숫자에 1 더하기
-
생성된 숫자에서 후행 0을 제거합니다(있는 경우)
N이 8이면 생성된 숫자는
1-8단계 → 9단계 →
적용2-1단계 적용 → (10에서 0 제거)
1단계 적용:2 → 3 → 4 → 5 → 6 → 7 → 8 (동일한 순서)
고유 번호의 개수는 9입니다.
예를 들어
입력
N=21
출력
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 18
설명
Numbers will be: 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3 −−−now same sequence Unique numbers are: 18
입력
N=38
출력
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 11
설명
Numbers will be: 38, 39, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 −−−now same sequence Unique numbers are: 11
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -
이 접근 방식에서 우리는 1단계와 2단계를 적용한 후에 생성된 모든 고유 번호를 포함하는 순서 없는 집합을 만들 것입니다. 숫자가 반복되는 경우 반복을 중지합니다. 세트의 크기는 프로세스에서 생성된 고유 번호의 수를 알려줍니다.
-
숫자 N을 정수로 취하십시오.
-
생성된 숫자를 삽입하려면 unordered_set
U_S를 사용합니다. -
unique_N(unordered_set
&U_S, int N) 함수는 집합과 N을 취하고 모든 숫자가 고유할 때까지 집합 U_S에 숫자를 추가합니다. -
U_S.count(N)이 1을 반환하면 N이 이미 집합에 존재한다는 의미입니다. 따라서 숫자가 반복되고 함수에서 반환됩니다.
-
그렇지 않으면 집합에 N을 삽입하고 작업 1을 적용합니다(1씩 증가).
-
숫자 N에 후행 0이 있는지 확인합니다(10의 배수).
-
N % 10이 0이면 후행 0을 10으로 나누어 제거합니다.
-
업데이트된 N으로 unique_N() 함수를 호출합니다.
-
함수에서 복귀한 후 설정된 U_S의 크기로 count를 취합니다.
-
결과를 개수로 인쇄합니다.
예시
#include <bits/stdc++.h> using namespace std; void unique_N(unordered_set<int>& U_S, int N){ if (U_S.count(N)){ return; } U_S.insert(N); N = N + 1; while (N % 10 == 0){ N = N / 10; } unique_N(U_S, N); } int main(){ int N = 7; unordered_set<int> U_S; unique_N(U_S, N); int count = U_S.size(); cout<<"Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: "<<count; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 9