排列组合
时间:2014-07-27 11:46:14
收藏:0
阅读:281
Description
In how many ways can you choose k elements out of n elements, not taking order into account?
Write a program to compute this number.
Write a program to compute this number.
Input
The input will contain one or more test cases.
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n).
Input is terminated by two zeroes for n and k.
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n).
Input is terminated by two zeroes for n and k.
Output
For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 2 31.
Warning: Don‘t underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
Warning: Don‘t underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
Sample Input
4 2 10 5 49 6 0 0
Sample Output
6 252 13983816
化简:C(a,b) = C(a,a-b);
因为a的乘方次数 == b的乘方次数 ,所以可以两者同时进行
因为b从1开始,所以对于【a/i*(a-1)】|(i+1) 一定成立。
#include<stdio.h> int main(){ int m1,n; while(scanf("%d%d",&m1,&n),m1|n){ __int64 s =1; int m = 1; int k = m1-n>n?m1-n:n; for(int i = m1;i>k;i--){ s = s*i/m; m++; } printf("%I64d\n",s); } }
原文:http://blog.csdn.net/yuanhanchun/article/details/38148761
评论(0)