SGU 222 Little Rooks
排列组合
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int n, k; 5 int COM(int n, int m) 6 { 7 if(m > n - m) m = n - m; 8 int i, j, res = 1; 9 for(i = n, j = 1; i > n - m; i --) 10 { 11 res *= i; 12 for(; j <= m && res % j == 0; res /= j, j ++); 13 } 14 return res; 15 } 16 int main() 17 { 18 while(scanf("%d%d", &n, &k) != EOF) 19 { 20 if(k > n) 21 { 22 printf("0\n"); 23 continue; 24 } 25 int ans = 1; 26 for(int i = n; i > n - k; i --) 27 ans *= i; 28 ans *= COM(n, k); 29 printf("%d\n", ans); 30 } 31 return 0; 32 }