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

C++에서 모든 숫자가 구별되도록 주어진 숫자보다 엄격하게 작은 숫자를 인쇄하십시오.


이 문제에서는 숫자 n이 주어집니다. 우리의 임무는 모든 숫자가 구별되도록 n보다 작은 가장 큰 숫자를 출력하는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

Input: n = 2332
Output: 2319

이 문제를 해결하기 위해 숫자의 카운트를 n에서 0으로 반대로 합니다. 그리고 현재 카운트 값이 조건을 만족하면 출력하고 루프를 종료하는 고유한 자릿수를 가진 숫자를 확인합니다. 그렇지 않으면 루프를 계속하십시오. 루프가 실행될 최대 횟수는 항상 n보다 작습니다.

예시

솔루션 구현을 위한 프로그램,

#include <bits/stdc++.h>
using namespace std;
int findDistinctDigitNumber(int n) {
   for (int i = n - 1; i>=0 ; i--) {
      int count[10] = { 0 };
      int x = i;
      int count1 = 0, count2 = 0;
      while (x) {
         count[x % 10]++;
         x /= 10;
         count1++;
      }
      for (int j = 0; j < 10; j++) {
         if (count[j] == 1)
            count2++;
      }
      if (count1 == count2)
      return i;
   }
}
int main() {
   int n = 44324;
   cout<<"Number less than "<<n<<" with all digits distinct are : "<<findDistinctDigitNumber(n);
   return 0;
}

출력

Number less than 44324 with all digits distinct are : 43987