C 언어로 조합 (nCr) 계산하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그램을 사용하여 조합 (nCr) 을 계산하는 방법을 배웁니다. 이 실습은 주요 두 단계로 구성됩니다. 첫째, n 과 r 의 입력 값을 읽고, 둘째, 조합 nCr = n! / (r! * (n-r)!) 을 계산하는 공식을 구현하는 것입니다. 이 실습을 마치면 n 과 r 의 값이 주어지면 조합을 계산할 수 있는 완성된 C 프로그램을 갖게 될 것입니다.

이 실습은 scanf() 함수를 사용하여 n 과 r 의 입력 값을 읽는 방법을 보여주면서 시작합니다. 그런 다음 최종 결과를 계산하는 데 사용되는 팩토리얼 및 조합 계산 함수의 구현을 소개합니다. 이 실습에서는 완성된 코드와 단계별 지침을 제공하여 자신의 프로젝트에서 개념을 따라하고 적용하기 쉽도록 합니다.

n 과 r 읽기

이 단계에서는 C 프로그램에서 조합을 계산하기 위해 n 과 r 의 입력 값을 읽는 방법을 배웁니다.

먼저 조합 계산 프로그램을 위한 새로운 C 파일을 만듭니다.

cd ~/project
nano combinations.c

이제 입력 값을 읽는 다음 코드를 추가합니다.

#include <stdio.h>

int main() {
    int n, r;

    // 사용자에게 n 과 r 의 값을 입력하도록 요청
    printf("n 의 값을 입력하세요: ");
    scanf("%d", &n);

    printf("r 의 값을 입력하세요: ");
    scanf("%d", &r);

    // 입력된 값을 출력하여 입력을 확인
    printf("n = %d, r = %d를 입력했습니다.\n", n, r);

    return 0;
}

컴파일하고 프로그램을 실행하여 입력을 테스트합니다.

gcc combinations.c -o combinations
./combinations

예시 출력:

n의 값을 입력하세요: 5
r의 값을 입력하세요: 3
n = 5, r = 3를 입력했습니다.

이 코드는 다음을 보여줍니다.

  • 사용자로부터 정수 입력을 읽기 위해 scanf()를 사용하는 방법
  • 사용자에게 n 과 r 의 값을 입력하도록 요청하는 방법
  • 입력된 값을 출력하여 올바른 입력을 확인하는 방법

이 코드는 먼저 필요한 입력 값 n 과 r 을 가져옴으로써 조합 계산을 위한 기반을 설정합니다.

nCr = n!/(r!(n-r)!) 계산

이 단계에서는 팩토리얼을 계산하는 함수를 구현하고 nCr = n! / (r! * (n-r)!) 공식을 사용하여 조합을 계산합니다.

이전의 combinations.c 파일을 열고 팩토리얼 및 조합 계산 함수로 업데이트합니다.

cd ~/project
nano combinations.c

팩토리얼 및 조합 계산을 구현하는 다음 코드를 추가합니다.

#include <stdio.h>

// 팩토리얼 계산 함수
unsigned long long factorial(int num) {
    if (num == 0 || num == 1) {
        return 1;
    }

    unsigned long long result = 1;
    for (int i = 2; i <= num; i++) {
        result *= i;
    }

    return result;
}

// 조합 (nCr) 계산 함수
unsigned long long combinations(int n, int r) {
    // 입력 유효성 검사
    if (r > n) {
        return 0;
    }

    // 조합 공식: nCr = n! / (r! * (n-r)!) 사용
    unsigned long long numerator = factorial(n);
    unsigned long long denominator = factorial(r) * factorial(n - r);

    return numerator / denominator;
}

int main() {
    int n, r;

    // 사용자에게 n 과 r 의 값을 입력하도록 요청
    printf("n 의 값을 입력하세요: ");
    scanf("%d", &n);

    printf("r 의 값을 입력하세요: ");
    scanf("%d", &r);

    // 조합을 계산하고 출력
    unsigned long long result = combinations(n, r);

    printf("조합 C(%d, %d) = %llu\n", n, r, result);

    return 0;
}

컴파일하고 프로그램을 실행합니다.

gcc combinations.c -o combinations
./combinations

예시 출력:

n의 값을 입력하세요: 5
r의 값을 입력하세요: 3
조합 C(5, 3) = 10

이 구현의 주요 내용:

  • factorial() 함수는 주어진 수의 팩토리얼을 계산합니다.
  • combinations() 함수는 조합 공식을 구현합니다.
  • 더 큰 팩토리얼 계산을 처리하기 위해 unsigned long long을 사용합니다.
  • 잘못된 조합을 방지하기 위해 입력을 검증합니다.

결과 출력

이 단계에서는 조합 계산 프로그램을 개선하여 더욱 정보적인 출력과 오류 처리를 추가합니다.

combinations.c 파일을 열고 코드를 수정합니다.

cd ~/project
nano combinations.c

개선된 결과 출력 및 입력 유효성 검사를 포함하여 코드를 업데이트합니다.

#include <stdio.h>

// 이전의 팩토리얼 및 조합 함수는 동일하게 유지

int main() {
    int n, r;

    // 사용자에게 n 과 r 의 값을 입력하도록 요청
    printf("조합 (nCr) 계산기\n");
    printf("---------------------\n");

    // 입력 유효성 검사
    do {
        printf("총 항목 수 (n) 를 입력하세요: ");
        scanf("%d", &n);

        if (n < 0) {
            printf("오류: n 은 음이 아닌 정수여야 합니다.\n");
        }
    } while (n < 0);

    do {
        printf("선택할 항목 수 (r) 를 입력하세요: ");
        scanf("%d", &r);

        if (r < 0 || r > n) {
            printf("오류: r 은 0 과 n 사이의 값이어야 합니다.\n");
        }
    } while (r < 0 || r > n);

    // 조합 계산
    unsigned long long result = combinations(n, r);

    // 자세한 결과 출력
    printf("\n결과 분석:\n");
    printf("-------------\n");
    printf("총 항목 (n): %d\n", n);
    printf("선택할 항목 (r): %d\n", r);
    printf("가능한 조합 (nCr): %llu\n", result);

    // 결과 해석
    printf("\n해석:\n");
    printf("---------\n");
    printf("%d개의 항목 집합에서 %d개의 항목을 선택하는 방법은 %llu 가지입니다.\n",
           n, r, result);

    return 0;
}

컴파일하고 프로그램을 실행합니다.

gcc combinations.c -o combinations
./combinations

예시 출력:

조합 (nCr) 계산기
---------------------
총 항목 수 (n)를 입력하세요: 5
선택할 항목 수 (r)를 입력하세요: 3

결과 분석:
-------------
총 항목 (n): 5
선택할 항목 (r): 3
가능한 조합 (nCr): 10

해석:
---------
5개의 항목 집합에서 3개의 항목을 선택하는 방법은 10가지입니다.

주요 개선 사항:

  • 잘못된 입력을 방지하기 위해 입력 유효성 검사를 추가했습니다.
  • 자세한 결과 분석을 포함하여 출력을 개선했습니다.
  • 조합 결과의 해석을 제공했습니다.

요약

이 실습에서는 n 과 r 의 입력 값을 읽고, nCr = n! / (r! * (n-r)!) 공식을 사용하여 조합 (nCr) 을 계산하는 방법을 배웠습니다. 팩토리얼과 조합을 계산하는 함수를 구현하고, 이 함수를 사용하여 최종 결과를 계산했습니다. 주요 단계는 1) n 과 r 의 입력 값을 읽고, 2) 공식과 팩토리얼 함수를 사용하여 조합을 계산하는 것이었습니다.