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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP