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

C++에서 연관 연산으로 n개의 요소를 곱하는 방법

<시간/>

이 문제에서 원소의 개수인 정수 n이 주어집니다. 우리의 임무는 n개의 요소를 연관 연산으로 곱하는 방법의 수를 세는 프로그램을 만드는 것입니다.

연관 작업 숫자 배열 방식에 관계없이 동일한 결과를 반환합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

3

출력

12

설명

(x*(y*z)), (x*(z*y)), (y*(x*z)), (y*(z*x)), (z*(x*y) )), (z*(y*x)),((x*y)*z), ((y*x)*z), ((x*z)*y), ((z*x)* y), ((z*y)*x), ((y*z)*x).

이 문제를 해결하기 위해 결과를 일반화할 수 있도록 생성할 수 있는 관계 또는 시리즈 유형이 있는지 찾으려고 합니다. 연산자의 수에 따른 연관 연산의 수를 보자 -

1 => 12 => 23 => 12

이제 카운트를 일반화하려고 합니다. n개의 요소에 대한 연관 연산을 생성한다고 가정하고 n-1개의 곱셈 연산자와 n-1개의 괄호를 배치할 수 있습니다.

여기서는 두 가지 방법으로 정렬합니다 -

  • (n-1까지 곱하는 방법 고려 ). 그런 다음 연결의 끝 부분에 마지막 요소를 삽입할 수 있습니다. 이것은 n-1개의 숫자에 대해 n개의 연산자에 대한 2*2*(n-2) 연관에서 나올 수 있습니다.

  • 그런 다음 (a1, a2, … a(n-1))의 곱셈과 연관을 생성하는 두 가지 추가 방법을 제공하는 왼쪽 또는 오른쪽의 배수를 고려할 것입니다.

위의 경우를 사용하여 n개의 연산자에 대한 총 연관을 추가하고 구해 보겠습니다.

<미리>ass(n) =((2*2*(n-2))(ass(n-1))) + 2*(ass(n-1))ass(n) =(4n-8) (엉덩이(n-1)) + 2*(엉덩이(n-1))엉덩이(n) =(4n-6)(엉덩이(n-1))

이 관계는 동일한 공식과 동일한 이니셜 값을 갖는 의사 카탈로니아 숫자와 동일합니다.

따라서 여기에 의사 카탈루냐 숫자에 대한 일반 공식을 적용할 수 있습니다.

엉덩이(n) =(2*n-2)!/(n-1)!

값 n =5에 대한 공식의 작동 방식을 살펴보겠습니다.

ass(10) =(2*5 - 2)!/ (5-1)!ass(10) =8!/4! =40320/24 =1680

연관 연산으로 n개의 요소를 곱하는 방법을 찾는 프로그램

// n개의 요소를 연관 연산으로 곱하는 방법을 찾는 프로그램 −

예시

#includenamespace std;long int calcFactorial(int n){ if (n ==0 || n ==1) return 1; return n*calcFactorial(n-1);}long int calcWays ( int n ){ int N =2*n - 2; 정수 R =n - 1; return (calcFactorial((2*n)-2)/calcFactorial(n-1));}int main(){ int n =7; cout<<"연관 연산으로 "< 

출력

7개의 요소를 연관 연산으로 곱하는 방법 :665280