首页 > 代码库 > 排列组合
排列组合
H - 掉了你 列组
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
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); } }
排列组合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。