POJ
来源:互联网 发布:鹰眼摄像头监控软件 编辑:程序博客网 时间:2024/05/21 06:50
Computing the exact number of ways that N things can be taken M at a time can be a great challenge when N and/or M become very large. Challenges are the stuff of contests. Therefore, you are to make just such a computation given the following:
GIVEN: 5 <= N <= 100; 5 <= M <= 100; M <= N
Compute the EXACT value of: C = N! / (N-M)!M!
You may assume that the final value of C will fit in a 32-bit Pascal LongInt or a C long. For the record, the exact value of 100! is:
93,326,215,443,944,152,681,699,238,856,266,700,490,715,968,264,381,621, 468,592,963,895,217,599,993,229,915,608,941,463,976,156,518,286,253, 697,920,827,223,758,251,185,210,916,864,000,000,000,000,000,000,000,000
GIVEN: 5 <= N <= 100; 5 <= M <= 100; M <= N
Compute the EXACT value of: C = N! / (N-M)!M!
You may assume that the final value of C will fit in a 32-bit Pascal LongInt or a C long. For the record, the exact value of 100! is:
93,326,215,443,944,152,681,699,238,856,266,700,490,715,968,264,381,621, 468,592,963,895,217,599,993,229,915,608,941,463,976,156,518,286,253, 697,920,827,223,758,251,185,210,916,864,000,000,000,000,000,000,000,000
The input to this program will be one or more lines each containing zero or more leading spaces, a value for N, one or more spaces, and a value for M. The last line of the input file will contain a dummy N, M pair with both values equal to zero. Your program should terminate when this line is read.
The output from this program should be in the form:
N things taken M at a time is C exactly.
N things taken M at a time is C exactly.
100 620 518 60 0
100 things taken 6 at a time is 1192052400 exactly.20 things taken 5 at a time is 15504 exactly.18 things taken 6 at a time is 18564 exactly.
代码1:
#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<cmath>#include<iomanip>#include<queue>#include<cstring>#include<map>using namespace std;typedef long long ll;#define M 105ll n,k;int main(){ ll i,j; while(cin>>n>>k) { if(n==0&&k==0) break; if(k==n) { cout<<n<<" things taken "<<k<<" at a time is "<<1<<" exactly."<<endl; continue; } cout<<n<<" things taken "<<k<<" at a time is "; if(n-k<k) k=n-k; ll ans=1; for(i=1;i<=k;i++) { ans=ans*(n-i+1)/i; } cout<<ans<<" exactly."<<endl; } return 0;}
代码2:
#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<cmath>#include<iomanip>#include<queue>#include<cstring>#include<map>using namespace std;typedef long long ll;#define M 105ll n,k;int main(){ ll i,j; while(cin>>n>>k) { if(n==0&&k==0) break; if(k==n) { cout<<n<<" things taken "<<k<<" at a time is "<<1<<" exactly."<<endl; continue; } cout<<n<<" things taken "<<k<<" at a time is "; if(n-k<k) k=n-k; double ans1=1,ans2=1; for(i=1;i<=k;i++) { ans2*=i; ans1*=n; n--; } printf("%.0lf",(ans1/ans2)); //ans1,ans2用longlong 会出错 cout<<" exactly."<<endl; } return 0;}
代码3:
#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<cmath>#include<iomanip>#include<queue>#include<cstring>#include<map>using namespace std;typedef long long ll;#define M 105ll n,k;ll c[M][M];void init(){ ll i,j; for(i=0;i<M;i++) c[i][0]=1; for(i=1;i<M;i++) { for(j=1;j<=i;j++) { c[i][j]=c[i-1][j]+c[i-1][j-1]; } }}int main(){ init(); while(cin>>n>>k) { if(n==0&&k==0) break; cout<<n<<" things taken "<<k<<" at a time is "<<c[n][k]<<" exactly."<<endl; } return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 682. Baseball Game
- C++学习之路(24)---LIB和DLL的区别与使用
- Android Studio:Broadcast 静态&动态广播注册
- MyBatis Generator系列(七)----MyBatis Generator Plugin插件之MapperConfigPlugin
- 网络基础知识
- POJ
- Android 显示输入法中的emoji表情以及String字符串转码
- 判断手机系统类型
- JAVA开发环境配置
- Linux学习笔记二
- 大数据常见错误解决方案
- php获取客服端口IP 以及物理地址 网络
- JavaScript事件
- 51nod 1277 字符串中的最大值(KMP)