在这个问题中,我们得到一个整数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