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)) 的乘法,并将 an 乘以左侧或右侧,这提供了创建关联的两种额外方法。
让我们添加并获取使用上述情况的 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
广告