Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 오일러 수

<시간/>

수학에서 오일러 수 특수 유형의 조합 번호입니다. 다음 요소가 이전 요소보다 큰 특정 숫자인 순열의 수를 정의합니다.

다음으로 표시됨,

A(n, m) 두 숫자가 m에 따라 달라지는 1에서 n으로의 순열입니다.

문제 설명: 이 문제에서는 두 개의 숫자 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