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