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

C++에서 주어진 범위의 모든 Good 숫자 인쇄

<시간/>

이 문제에서 우리는 세 개의 값 L, R, d를 받습니다. 우리의 임무는 모든 좋은 숫자를 인쇄하는 것입니다. L~R 범위 내 d를 숫자로 포함하지 않는 것.

좋은 숫자 모든 숫자가 오른쪽 숫자의 합보다 큰 숫자입니다(모든 숫자보다 덜 중요한 비트). 예를 들어 732는 7> 3+2 및 3>2입니다.

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

Input: L = 400 , R = 500 , k = 3
Output: 410, 420, 421

설명 - 400에서 500 사이의 좋은 숫자는 -

410, 420, 421, 430, but we cannot use 3 so 430 is not printed.

이 문제를 해결하기 위해 주어진 범위(예:L부터 R까지) 내의 모든 숫자를 확인합니다. 숫자가 좋은 숫자이고 그 숫자 중 하나라도 k와 같지 않으면 인쇄하고 그렇지 않으면 그대로 둡니다.

양호한 번호 확인 - 우리는 오른쪽에서 왼쪽으로 숫자를 탐색하고 합이 다음 숫자보다 크면 false를 반환하는 어느 시점에서든 합을 유지합니다.

예시

아래 알고리즘을 설명하는 프로그램을 보자 -

#include<bits/stdc++.h>
using namespace std;
bool isvalidNumber(int n, int d){
   int digit = n%10;
   int sum = digit;
   if (digit == d)
      return false;
   n /= 10;
   while (n){
      digit = n%10;
      if (digit == d || digit <= sum)
         return false;
      else{
         sum += digit;
         n /= 10;
      }
   }
   return 1;
}
void printGoodNumbersLtoR(int L, int R, int d){
   for (int i=L; i<=R; i++){
      if (isvalidNumber(i, d))
         cout << i << " ";
   }
}
int main(){
   int L = 400, R = 600, d = 3;
   cout<<"All good numbers from "<<L<<" to "<<R<<" that do not contain "<<d<<" are :\n";
   printGoodNumbersLtoR(L, R, d);
   return 0;
}

출력

All good numbers from 400 to 600 that do not contain 3 are −
410 420 421 510 520 521 540