이 기사에서 우리는 방정식을 만족하는 많은 육쌍둥이를 찾는 접근 방식을 설명할 것입니다. 그래서 아래의 방정식을 만족하는, b, c, d, e, f의 값을 찾아야 하는 방정식을 예로 들어보겠습니다.
( a + b + c ) * e / d = f
방정식을 재정렬합시다 -
( a + b + c ) = ( f * d ) / e
다음은 주어진 문제에 대한 간단한 예입니다 -
Input : arr [ ] = { 1, 3 }
Output : 4
Explanation : ( a, b, c, e, f ) = 1, d = 3
( a, b, c, d, e ) = 1, f = 3
( a, b, c ) = 1, ( d, e, f ) = 3
( a, b, c, d, f ) = 3, ( e ) = 1
Input : arr [ ] = { 2, 5 }
Output : 3 해결책을 찾기 위한 접근 방식
우리는 주어진 문제에 대한 해결책을 찾기 위해 순진한 접근 방식을 사용할 것입니다.
순진한 접근
이 문제에서 LHS와 RHS를 살펴보면 LHS의 가능한 모든 결과를 찾아 배열에 저장할 수 있습니다. 마찬가지로 RHS에 대한 배열을 만들고 RHS의 가능한 모든 결과로 채웁니다.
두 배열에 동일한 값이 있는지 확인하고 찾은 값마다 개수를 늘려 최종 결과를 보여줍니다.
예시
#include<bits/stdc++.h>
using namespace std;
int findsamenumbers(int *arr1, int *arr2, int n){
int i = 0, j = 0, k = 0, count=0;
while(( i < n*n*n+1) && (j < n*n*n+1)){
if(arr1[i] < arr2[j])
i++;
else if(arr1[i] == arr2[j]){
count++;
int temp = arr1[i];
while(temp==arr1[++i]){
count++;
}
while(temp==arr2[++j]){
count++;
}
}
else
j++;
}
return count;
}
int main(){
int arr[] = {2,5};
int n = sizeof(arr)/sizeof(arr[0]);
// Generating all possible values of LHS array
int index = 0,i;
int LHS[n*n*n ];
for ( i = 0; i < n; i++){
for (int j = 0; j < n; j++){
for(int k = 0; k < n; k++){
LHS[index++] = (arr[i] * arr[j]) / arr[k];
}
}
}
// Generating all possible value of RHS array
int RHS[n*n*n ];
index=0;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
for (int k = 0; k < n; k++){
RHS[index++] = (arr[i] + arr[j] + arr[k]);
}
}
}
sort(RHS, RHS + (n*n*n));
sort(LHS, LHS + (n*n*n));
int result = findsamenumbers(LHS, RHS, n);
cout<<"Number of sextuplets that satisfy an equation: "<<result;
return 0;
} 출력
Number of sextuplets that satisfy an equation: 3
위 프로그램 설명
이 프로그램에서는 LHS와 RHS의 모든 결과를 유지하기 위해 두 개의 배열을 생성합니다. 우리는 (a, b, c)의 가능한 모든 값을 LHS에, (d, e, f)를 RHS에 넣기 위해 세 개의 중첩 루프를 사용하고 있습니다. 그런 다음 두 배열을 모두 정렬하여 두 배열을 비교하고 두 배열에서 동일한 값을 찾고 두 배열을 모두 findsamenumber() 함수에 전달합니다.
findsamenumber() 함수에서 두 개의 중첩 루프를 사용하여 동일한 값을 확인합니다. 두 개의 요소가 동일한 것을 발견하면 가능한 모든 값이 계산되도록 두 배열에서 해당 숫자의 빈도를 확인합니다.
if(arr1[i] == arr2[j]){
count++;
int temp = arr1[i];
while(temp==arr1[++i]){
count++;
}
while(temp==arr2[++j]){
count++;
} 결론
이 기사에서 우리는 주어진 배열이 있는 방정식을 만족하는 육쌍둥이의 수를 풉니다. 6개의 변수 방정식 (a + b + c) * e / d =f에서 변수의 가능한 모든 값을 찾았습니다. C, Java, python과 같은 다른 프로그래밍 언어로 이 문제를 해결할 수 있습니다.