C++ 中的尤拉數


在數學中,尤拉數是一種特殊的組合數。它定義了排列中下一個元素比前一個元素大特定數字的數量。

表示為:

A(n, m) 是從 1 到 n 的排列,其中兩個數字相差 m。

問題陳述:在這個問題中,我們得到了兩個數字 m 和 n。我們需要找到尤拉數的排列數量。

讓我們舉個例子來理解這個問題,

輸入:n = 4,m = 2

輸出:11

解釋:

從 1 到 4 的所有數字排列為 -

1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2
2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 2 4 1 3 2 4 3 1
3 1 2 4 3 1 4 2 3 2 1 4 3 2 4 1 3 4 1 2 3 4 2 1
4 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1

在所有排列中,有 11 個排列的兩個數字之間的差值為 m。


解決方案方法 -

為了找到排列的數量,我們將使用尤拉數公式

A(n, m) = 0,如果 m > n 或 n = 0
           A(n, m) = 1,如果 m = 0
           A(n, m) = (n-m)A(n-1, m-1) + (m+1)A(n-1, m)
 


程式說明了解決方案的工作原理,

示例

線上演示

#include <iostream>
using namespace std;

int countEulerianNumber(int n, int m)
{
   if (m >= n || n == 0)
      return 0;
   if (m == 0)
      return 1;
   return ( ( (n - m) * countEulerianNumber(n - 1, m - 1) ) + ( (m + 1) * countEulerianNumber(n - 1, m) ) );
}

int main() {

   int n = 5, m = 3;
   cout<<"The number of Eulerian permutations is "<<countEulerianNumber(n, m);
   return 0;
}

輸出 -

The number of Eulerian permutations is 26

更新於: 2021年1月22日

241 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告