hdoj-2519-新生晚会
2016-04-21 19:57
274 查看
Problem Description
开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?
Input
数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。
每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)
Output
每组数据输出一个整数,每个输出占一行
Sample Input
5
3 2
5 3
4 4
3 6
8 0
Sample Output
3
10
1
0
1
就是一道排列组合问题吧
数据很小。直接算就好了,但是不知道为什么int和I64都不行,换成double就行
开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?
Input
数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。
每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)
Output
每组数据输出一个整数,每个输出占一行
Sample Input
5
3 2
5 3
4 4
3 6
8 0
Sample Output
3
10
1
0
1
就是一道排列组合问题吧
数据很小。直接算就好了,但是不知道为什么int和I64都不行,换成double就行
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int main() { int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); if(m>n) printf("0\n"); else if(m==n) printf("1\n"); else { if(n-m<m) m=n-m; double s1=1,s2=1; int i; for(i = 1; i <= m; i++) { s1*= i; s2*= n; n--; } printf("%.0f\n",s2/s1); } } return 0; }
相关文章推荐
- ZOJ 1243 URLs
- 最小路径覆盖和最小边覆盖及相关性质
- bzoj 2310: ParkII
- 【笔记】android 多线程同步实现方法
- 你最喜欢做什么--兴趣问题清单
- Eclipse取得路径的方法
- map的用法
- 去除ios移动端alert/confirm的网址(url)
- android自定义loding view(下)
- Angular JS 基础
- 程序员可以干多少年?
- Oracle 官方文档学习之 Cursor(Implicit,Explicit)教程(上)
- TreeSet详解
- matlab_最小二乘法数据拟合
- OpenCv学习笔记(一)--OpenCv中Mat类源码的详细解读(1)
- 第一次冲刺阶段(四)
- 抽取、转换和装载介绍(七)管理ETL环境(待续)
- 1008猜数字
- 一个好的产品的几个标准
- 冒泡排序法