EASY7
memorization / 조합 combination 본문
순환을 이용한 조합
m 배열에 값을 메모한다.
#include<stdio.h>
int comb(int n, int r, int *m);
int main()
{
int c;
int i;
int n, r;
int *m;
printf("enter number n and r (nCr)\n");
printf("n:");
scanf("%d", &n);
printf("r:");
scanf("%d", &r);
m = (int*)malloc(sizeof(int) * (r + 1));
for (i = 0; i <= r; i++)
m[i] = 0;
c = comb(n, r, m);
printf("%d", c);
return 0;
}
int comb(int n, int r, int *m)
{
if (r == n || r == 0)
return 1;
if (n - 1 == r)
{
if(m[r] == 0)
m[r] = comb(n - 1, r - 1, m) + comb(n - 1, r, m);
return m[r];
}
return comb(n - 1, r - 1, m) + comb(n - 1, r, m);
}
int comb(int n, int r, int *m);
int main()
{
int c;
int i;
int n, r;
int *m;
printf("enter number n and r (nCr)\n");
printf("n:");
scanf("%d", &n);
printf("r:");
scanf("%d", &r);
m = (int*)malloc(sizeof(int) * (r + 1));
for (i = 0; i <= r; i++)
m[i] = 0;
c = comb(n, r, m);
printf("%d", c);
return 0;
}
int comb(int n, int r, int *m)
{
if (r == n || r == 0)
return 1;
if (n - 1 == r)
{
if(m[r] == 0)
m[r] = comb(n - 1, r - 1, m) + comb(n - 1, r, m);
return m[r];
}
return comb(n - 1, r - 1, m) + comb(n - 1, r, m);
}
'개발 공부 > C' 카테고리의 다른 글
[c언어] 순환 / 큰 값으로 만들어주는 길 찾기 (0) | 2017.10.04 |
---|---|
memorization / 피보나치 수열 (0) | 2017.10.04 |
[c언어] 미로 길 찾기 (0) | 2017.10.04 |
[c언어] 디버깅 debuging (0) | 2017.09.28 |
[c언어] string.h 함수 (0) | 2017.09.28 |
Comments