C 언어로 순열 (nPr) 계산하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍에서 순열 (nPr) 을 계산하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.

먼저, 순열 계산에 필수적인 n 과 r 의 입력 값을 읽습니다. scanf() 함수를 사용하여 사용자로부터 입력을 받고, 입력된 값을 출력하여 입력을 확인합니다.

다음으로, 공식 nPr = n! / (n-r)!을 사용하여 팩토리얼과 순열 (nPr) 을 계산하는 함수를 구현합니다. r 이 n 보다 큰 경우에 해당하는 오류 메시지를 표시합니다.

n 과 r 읽기

이 단계에서는 C 프로그래밍에서 순열을 계산하기 위해 필수적인 n 과 r 의 입력 값을 읽는 방법을 배웁니다.

먼저, 순열 계산 프로그램을 구현하기 위한 새로운 C 파일을 생성합니다.

cd ~/project
nano permutations.c

이제 입력 값을 읽는 코드를 작성합니다.

#include <stdio.h>

int main() {
    int n, r;

    printf("총 항목 수 (n) 를 입력하세요: ");
    scanf("%d", &n);

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

    printf("입력된 값: n = %d, r = %d\n", n, r);

    return 0;
}

예시 출력:

총 항목 수(n)를 입력하세요: 5
선택할 항목 수(r)를 입력하세요: 3
입력된 값: n = 5, r = 3

코드를 자세히 살펴보겠습니다.

  • scanf()를 사용하여 사용자로부터 정수 입력을 읽습니다.
  • %d는 정수 형식 지정자입니다.
  • &n&r은 입력 값이 저장될 메모리 주소입니다.
  • 입력된 값을 출력하여 입력을 확인합니다.

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

gcc permutations.c -o permutations
./permutations

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

이 단계에서는 팩토리얼을 계산하여 순열 (nPr) 을 계산하는 함수를 구현합니다.

이전 permutations.c 파일을 수정하여 팩토리얼 계산 및 순열 계산을 추가합니다.

cd ~/project
nano permutations.c

이제 팩토리얼 및 순열 계산 함수를 포함하여 코드를 업데이트합니다.

#include <stdio.h>

// 팩토리얼 계산 함수
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// 순열 (nPr) 계산 함수
unsigned long long permutation(int n, int r) {
    // 잘못된 입력 검사
    if (r > n) {
        printf("Error: r 은 n 보다 클 수 없습니다.\n");
        return 0;
    }

    // 공식 n! / (n-r)! 을 사용하여 nPr 계산
    return factorial(n) / factorial(n - r);
}

int main() {
    int n, r;

    printf("총 항목 수 (n) 를 입력하세요: ");
    scanf("%d", &n);

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

    unsigned long long result = permutation(n, r);

    if (result > 0) {
        printf("%d개의 항목 중 %d개를 선택한 순열 (nPr) 은: %llu\n", n, r, result);
    }

    return 0;
}

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

gcc permutations.c -o permutations
./permutations

예시 출력:

총 항목 수(n)를 입력하세요: 5
선택할 항목 수(r)를 입력하세요: 3
5개의 항목 중 3개를 선택한 순열(nPr)은: 60

구현에 대한 주요 내용:

  • factorial() 함수는 주어진 숫자의 팩토리얼을 계산합니다.
  • permutation() 함수는 nPr 공식 (n! / (n-r)!) 을 구현합니다.
  • 더 큰 팩토리얼 값을 처리하기 위해 unsigned long long을 사용합니다.
  • 입력 유효성 검사를 통해 r 이 n 보다 작거나 같은지 확인합니다.

결과 출력

이 단계에서는 순열 계산 프로그램을 개선하여 더 자세한 출력 및 서식 옵션을 추가합니다.

permutations.c 파일을 수정하여 결과 표시를 개선합니다.

cd ~/project
nano permutations.c

개선된 결과 출력으로 코드를 업데이트합니다.

#include <stdio.h>

// 팩토리얼 계산 함수
unsigned long long factorial(int num) {
    unsigned long long result = 1;
    for (int i = 1; i <= num; i++) {
        result *= i;
    }
    return result;
}

// 순열 (nPr) 계산 함수
unsigned long long permutation(int n, int r) {
    // 잘못된 입력 검사
    if (r > n) {
        printf("Error: r 은 n 보다 클 수 없습니다.\n");
        return 0;
    }

    // 공식 n! / (n-r)! 을 사용하여 nPr 계산
    return factorial(n) / factorial(n - r);
}

// 자세한 순열 설명 출력 함수
void printPermutationDetails(int n, int r, unsigned long long result) {
    printf("\n--- 순열 계산 세부 정보 ---\n");
    printf("총 항목 수 (n): %d\n", n);
    printf("선택된 항목 수 (r): %d\n", r);
    printf("계산: %d P %d = %d! / (%d - %d)!\n", n, r, n, n, r);
    printf("결과: %llu 개의 서로 다른 배열이 가능합니다.\n", result);
    printf("----------------------------------------\n");
}

int main() {
    int n, r;

    printf("순열 (nPr) 계산기\n");
    printf("총 항목 수 (n) 를 입력하세요: ");
    scanf("%d", &n);

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

    unsigned long long result = permutation(n, r);

    if (result > 0) {
        printPermutationDetails(n, r, result);
    }

    return 0;
}

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

gcc permutations.c -o permutations
./permutations

예시 출력:

순열(nPr) 계산기
총 항목 수(n)를 입력하세요: 5
선택할 항목 수(r)를 입력하세요: 3

--- 순열 계산 세부 정보 ---
총 항목 수(n): 5
선택된 항목 수(r): 3
계산: 5 P 3 = 5! / (5 - 3)!
결과: 60개의 서로 다른 배열이 가능합니다.
----------------------------------------

주요 개선 사항:

  • 전용 printPermutationDetails() 함수를 추가했습니다.
  • 계산에 대한 더욱 정보적인 출력을 포함했습니다.
  • 순열 공식과 결과를 설명했습니다.
  • 제목과 자세한 설명으로 사용자 인터페이스를 개선했습니다.

요약

이 실험에서는 C 프로그래밍에서 순열을 계산하는 데 필수적인 n 과 r 의 입력 값을 읽는 방법을 배웠습니다. 또한, n! / (n-r)! 공식을 사용하여 팩토리얼과 순열 (nPr) 을 계산하는 함수를 구현했습니다.

핵심 학습 내용은 정수 입력을 읽기 위한 scanf() 사용, 팩토리얼 및 순열 계산 함수 구현, r 이 n 보다 큰 잘못된 입력 처리입니다.