在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 => 1
2 => 2
3 => 12

现在,让我们尝试归纳计数。假设,我们要为n个元素创建关联运算,然后可以放置n-1个乘法运算符和n-1个括号。

在这里,我们将以两种方式安排它们-

  • 考虑乘以直到(n-1)的方式。然后我们可以在关联的任意一端插入最后一个元素an。对于n-1个数,这可以来自2 * 2 *(n-2)个对n个运算符的关联。

  • 然后,我们将考虑(a1,a2,…a(n-1))的乘积,然后乘以a左右或乘以a,这给出了创建关联的其他两种方式。

让我们使用上述情况添加并获得n个运算符的总关联。

ass(n) = ((2*2*(n-2))(ass(n-1))) + 2*(ass(n-1))
ass(n) = (4n-8)(ass(n-1)) + 2*(ass(n-1))
ass(n) = (4n-6)(ass(n-1))

此关系与伪加泰罗尼亚数字相同,后者具有相同的公式和相同的初始值。

因此,我们可以在此处为伪加泰罗尼亚数应用一般公式,

ass(n) = (2*n-2)!/(n-1)!

让我们看一下值n = 5的公式的工作原理。

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

程序找到用关联运算将n个元素相乘的方法

//程序来查找用关联运算将n个元素相乘的方式-

示例

#include<iostream>
using namespace 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 ;
   int R = n - 1 ;
   return (calcFactorial((2*n)-2)/calcFactorial(n-1));
}
int main(){
   int n = 7;
   cout<<"The ways to multiply "<<n<<" elements with an associative operation : "<<calcWays(n);
   return 0 ;
}

输出结果

The ways to multiply 7 elements with an associative operation : 665280