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

C++에서 그 안에 있는 숫자와 q가 있는 곱이 같지 않도록 범위의 숫자를 셉니다.

<시간/>

범위 변수로 시작하고 끝나는 두 개의 숫자와 입력으로 정수 q가 주어지면. 목표는 숫자와 q가 있는 곱이 공통 숫자가 없는 범위 내에서 숫자를 찾는 것입니다.

숫자가 5이고 q가 3이면 곱은 15가 됩니다. 5와 15는 모두 공통 숫자 5를 갖습니다.

숫자가 2이고 q가 5이면 곱은 10이 됩니다. 2와 10에는 공통 숫자가 없습니다.

예를 들어 이해합시다.

예를 들어

입력 - 시작 =5, 끝 =10, q =2

출력 - 범위 내의 숫자와 q가 있는 곱이 같지 않은 숫자의 개수:5

설명 - 숫자는 다음과 같습니다.

  • 5 ( 5 * 2 =10 )
  • 6 ( 6 * 2 =12 )
  • 7 ( 7 * 2 =14 )
  • 8 ( 8 * 2 =16 )
  • 9 ( 9 * 2 =18 )

입력 - 시작 =20, 끝 =25, q =5

출력 - 범위 내의 숫자와 q가 있는 곱이 같지 않은 숫자의 개수:2

설명 - 숫자는 다음과 같습니다.

  • 22 ( 22 * ​​5 =110 )
  • 23 ( 23 * 5 =115 )

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서 우리는 처음부터 끝까지 순회하고 q가 있는 각 숫자와 곱을 문자열로 변환합니다. 이제 현재 숫자의 문자 수를 저장할 배열 arr[26]을 만듭니다. 이제 제품의 문자열(현재 숫자 * q)을 탐색하고 해당 문자열의 문자가 arr[]에서 0이 아닌 값을 갖는 경우 일반적이므로 0을 반환합니다. 그렇지 않으면 1을 반환합니다.

  • 범위 변수와 값 q를 취합니다.
  • 함수 검사(int i, int q)는 숫자 i와 q를 취하고 i와 q의 숫자가 같지 않거나 공통적이지 않으면 1을 반환합니다.
  • str =to_string(i)을 사용하여 i를 문자열로 변환합니다.
  • str_2 =to_string(temp)을 사용하여 제품( temp=q*i )을 스팅으로 변환합니다.
  • str의 문자 수에 대해 주파수 배열 arr[26] ={ 0 }을 사용합니다.
  • for 루프를 사용하여 str을 트래버스하고 arr[str[j] - '0']++을 사용하여 빈도를 업데이트합니다.
  • for 루프를 사용하여 str_2를 트래버스하고 arr[str_2[j] - '0']이 0이 아닌지 확인하고, 그렇다면 공통입니다. 0을 반환합니다.
  • 그렇지 않으면 1을 반환합니다.
  • unequal(int start, int end, int q) 함수는 범위 변수와 q를 취해 범위 내의 숫자와 q와의 곱이 같지 않도록 범위 내 숫자의 개수를 반환합니다.
  • 초기 카운트를 0으로 합니다.
  • for 루프를 사용하여 i-start에서 i=end까지 숫자를 트래버스합니다.
  • check(i, q)를 사용하여 숫자 i와 q가 있는 곱에 공통 숫자가 없는지 찾습니다. 그렇다면 카운트를 증가시키십시오.
  • 끝에 결과로 계산됩니다.

예시

#include <bits/stdc++.h>
using namespace std;

int check(int i, int q) {
   string str = to_string(i);
   int length = str.size();
   int arr[26] = {
      0
   };

   int temp = i * q;
   string str_2 = to_string(temp);
   int length_2 = str_2.size();
   for (int j = 0; j < length; j++) {
      arr[str[j] - '0']++;
   }
   for (int j = 0; j < length_2; j++) {
      if (arr[str_2[j] - '0']) {
         return 0;
      }
   }
   return 1;
}

int unequal(int start, int end, int q) {
   int count = 0;

   for (int i = start; i <= end; i++) {
      if (check(i, q)) {
         count++;
      }
   }
   return count;
}
int main() {
   int start = 20, end = 40, q = 4;
   cout << "Count of numbers in range such that digits in it and it's product with q are unequal are: " << unequal(start, end, q);
   return 0;
}

위의 코드를 실행하면 다음 출력이 생성됩니다 -

출력

Count of numbers in range such that digits in it and it's product with q are unequal are: 1