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

C++에서 1을 추가하고 후행 0을 제거하여 N에서 생성할 수 있는 고유 숫자 계산


입력으로 숫자 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