이 튜토리얼에서는 각 배열 요소의 모듈러스가 동일하도록 숫자를 찾는 프로그램을 작성할 것입니다. 예를 들어 보겠습니다.
입력 - arr ={10, 4, 2}
출력 − 1 2
두 개의 숫자가 있는 경우 x, y 및 x> 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
결론
튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.