/* Part5 演習問題5 */ /* 順列および組み合わせ */ #include <stdio.h> int perm(int, int) ; int comb(int, int) ; int fact(int) ; int main(void) { int n,r ; printf("順列・組み合わせを計算するnとr(n≧r): ") ; scanf("%d %d",&n,&r) ; if((n<1)||(n>12)||(r<1)||(n<r)) { printf("nあるいはrの少なくとも一方が誤りです。\n") ; return(1) ; } printf("順列 %dP%d = %d\n",n,r,perm(n,r)) ; printf("組み合わせ %dC%d = %d\n",n,r,comb(n,r)) ; return(0) ; } /* 順列の計算(nPr) */ int perm(int n , int r) { return(fact(n)/fact(n-r)) ; } /* 組み合わせの計算(nCr) */ int comb(int n, int r) { return(fact(n)/(fact(n-r)*fact(r))) ; } /* 階乗の計算(n!) */ int fact(int n) { if(n==0) return(1) ; else return(n*fact(n-1)) ; } |
% gcc -Wall part5-5.c % ./a.out 順列・組み合わせを計算するnとr(n≧r): 2 4 nあるいはrの少なくとも一方が誤りです。 % ./a.out 順列・組み合わせを計算するnとr(n≧r): 4 2 順列 4P2 = 12 組み合わせ 4C2 = 6 % ./a.out 順列・組み合わせを計算するnとr(n≧r): 4 4 順列 4P4 = 24 組み合わせ 4C4 = 1 |