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

C++를 사용하여 방정식을 만족하는 육쌍둥이의 수 찾기

<시간/>

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