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

C++에서 각 배열 요소의 계수가 동일하도록 'k' 찾기

<시간/>

이 튜토리얼에서는 각 배열 요소의 모듈러스가 동일하도록 숫자를 찾는 프로그램을 작성할 것입니다. 예를 들어 보겠습니다.

입력 - arr ={10, 4, 2}

출력 − 1 2

두 개의 숫자가 있는 경우 x, yx> y , x - y =d라고 가정합니다.

그런 다음 x =y + d .

숫자 k가 있다고 가정해 보겠습니다. x%k =y%k입니다. 모듈로 k 적용 위의 방정식에 대해 d 값을 찾습니다. .

x%k = (y+d)%k
y%k = y%k +d%k
d%k = 0

위 계산에서 숫자 k인 경우 x의 차이의 제수입니다. 및 y . 그런 다음 숫자 x의 약수가 됩니다. 및 y .

요소 배열에 동일한 개념을 적용해 보겠습니다. 그리고 k 값을 찾으십시오. 문제 해결 단계를 참조하십시오.

  • 숫자로 배열 초기화

  • 여기서 d 배열 요소의 최대값과 최소값의 차이가 됩니다.

  • 정렬 방법을 사용하여 배열의 값을 정렬합니다.

  • 마지막 숫자와 첫 숫자의 차이를 찾으세요.

  • 차이가 0이면 모든 숫자가 같습니다. 그런 다음 임의의 숫자를 가진 모듈의 결과는 동일한 결과를 제공합니다.

  • 그렇지 않으면 숫자 d의 제수를 찾습니다. . 그리고 보관하세요.

  • 모든 제수에 대해 반복하고 모든 배열 요소의 모듈로가 동일한 숫자를 찾습니다.

코드를 봅시다.

#include <bits/stdc++.h>
using namespace std;
void findNumbers(int arr[], int n) {
   sort(arr, arr + n);
   int d = arr[n - 1] - arr[0];
   // check whether all elements are same or not
   if (d == 0) {
      cout << "Infinite number of k's";
      return;
   }
   // finding the divisors of d
   vector <int> v;
   for (int i = 1; i * i <= d; i++) {
      if (d % i == 0) {
         v.push_back(i);
         if (i != d / i) {
            v.push_back(d / i);
         }
      }
   }
   // findind the k's
   for (int i = 0; i < v.size(); i++) {
      int temp = arr[0] % v[i];
      int j;
      for (j = 1; j < n; j++) {
         if (arr[j] % v[i] != temp) {
            break;
         }
      }
      if (j == n)
         cout << v[i] << " ";
      }
      cout << endl;
   }
   int main() {
      int arr[] = {10, 4, 2};
      findNumbers(arr, 3);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

1 2

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.