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

C++ k개의 것을 함께 사용하여 한 번에 r개를 취한 n개의 순열

<시간/>

n, r, k가 주어졌을 때, 예를 들어 특정 k가 항상 함께 발생하도록 n에서 r을 선택하는 방법을 찾아야 합니다.

Input : n = 8, r = 5, k = 2

Output : 960


Input : n = 6, r = 2, k = 2

Output : 2

이 문제는 k가 함께 모이도록 n과 r의 순열을 찾아야 하기 때문에 이 문제에 대한 약간의 지식이 필요합니다.

해결책을 찾기 위한 접근 방식

이 질문에 대한 공식을 공식화해야 합니다. 그러면 답이 나옵니다.

예시

#include <bits/stdc++.h>
using namespace std;
int fact(int n){ // function to calculate factorial of a number
    if(n <= 1)
        return 1;
    return n * fact(n-1);
}
int npr(int n, int r){ // finding permutation
    int pnr = fact(n) / fact(n - r);
    return pnr;
}
int countPermutations(int n, int r, int k){ // the formula that we came up with
    return fact(k) * (r - k + 1) * npr(n - k, r - k);
}
int main(){
    int n = 8;
    int r = 5;
    int k = 2;
    cout << countPermutations(n, r, k);
    return 0;
}

출력

960

위 코드 설명

위의 접근 방식에서 우리는 이 문제에 대한 답을 계산하기 위한 공식을 고안하려고 합니다. 우리가 고안한 공식은 (k!) * (r - k + 1) * P(n-k, r-k)입니다. ( P(x, y) 는 x 에서 선택 y 의 순열 수입니다.) 따라서 공식을 설정하고 답을 계산합니다.

결론

이 튜토리얼에서 우리는 한 번에 r개의 k개를 가지고 n개의 순열을 찾는 문제를 풉니다. 우리는 또한 이 문제에 대한 C++ 프로그램과 이 문제를 해결하기 위한 완전한 접근 방식( Normal)을 배웠습니다.

C, Java, python 및 기타 언어와 같은 다른 언어로 동일한 프로그램을 작성할 수 있습니다. 이 튜토리얼이 도움이 되기를 바랍니다.