이 기사에서 우리는 방정식을 만족하는 많은 육쌍둥이를 찾는 접근 방식을 설명할 것입니다. 그래서 아래의 방정식을 만족하는, 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과 같은 다른 프로그래밍 언어로 이 문제를 해결할 수 있습니다.