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