IT/솔루션) 난 정말C... 없다구요

16장. 실력 다지기 연습문제 02) 문제 7 [순열과 조합]

돔찌 2019. 4. 16. 08:05

<2016. 9. 21. 22:55>

16장. 실력 다지기 연습문제 02) 문제 7 [순열과 조합]

 

/*
순열과 조합의 결과를 출력하는 프로그램을 작성해보자.
단 아래의 조건을 모두 만족시켜야 한다.
 - 순열과 조합의 함수르 각각 정의하자.
 - 두 공식 모두 다음 수식을 많이 필요로 한다. 따라서 이를 별도의 함수로 정의하자.
  n! = n * (n-1) * (n-2) * ... * 1
 - 조합 함수는 순열 함수를 호출하는 형태로 정의하자.
*/
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)
int Permutation(int n, int r);
int Combination(int n, int r);
int nnn(int n);
int main(void) {
	int n, r;
	printf("총 개수와 선택할 수를 입력하시오. : ");
	scanf("%d %d", &n, &r);
	printf("총 %d개 중에서 %d개를 선택하는 경우의 수 중, 순열은 %ld, 조합은 %ld 입니다.\n",n,r, Permutation(n, r), Combination(n, r));
	system("pause");
	return 0;
}
// n! 구하는 함수 ( n * (n-1) * (n-2) * ..... 1 )
int nnn(int n) // n 15 전달받을경우 {
	int sum = 1;
	// 계를 저장할 수 long형으로 선언
	for (n; n != 1; n--) // n부터 1까지 내려가면서 {
		sum *= n;
		// n을 sum에다가 곱해준다
	}
	return sum;
}
int Permutation(int n, int r) {
	return nnn(n) / nnn(n - r);
}
int Combination(int n, int r) {
	return nnn(n) / (nnn(r)*nnn(n - r));
}