Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 15158 | Accepted: 4629 |
Description
Input
Output
Sample Input
4 2 10 5 49 6 0 0
Sample Output
6 252 13983816
Source
#include <cstdio> #include <cstdlib> int main(void){ int n, k; long long result; int i, j; double tmp1, tmp2; while (scanf("%d%d", &n, &k), n != 0 || k != 0) { if (k > n / 2){ k = n - k ; } for (i = n, tmp1 = 1; i > n - k; i--){ tmp1 *= i; } for (i = k, tmp2 = 1; i >= 1; i--){ tmp2 *= i; } result = tmp1 / tmp2; printf("%lld\n", result); } return 0; }
#include <stdio.h> int n, k; int num[256]; int max(int a, int b){ return a>b?a:b; } int gcd( int a, int b){ return (b==0?a:gcd(b, a%b)); } int main(){ while (scanf("%d%d", &n, &k), n||k) { int i, j, g, temp, sum=1, times; int m= max(k, n-k); for ( i = 0; m+i < n; i++){ num[i]=m+i+1; } times= n-m; while(i>1){ temp=i; for ( j = 0; j < times; j++ ){ if (1 == temp){ break; } g=gcd(num[j], temp); num[j]/=g; temp/=g; } i--; } for ( i = 0; i < times; i++){ sum*=num[i]; } printf("%d\n", sum); } return 0; }