【ACM】杭電OJ 2048 2049
阿新 • • 發佈:2018-11-25
兩題均是錯排公式與階乘的運用
2048算的是一個比例,2049計算的是一個事情發生的總數
一個用double 來存放資料,一個用long long來存放資料
2048
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; double a[25],b[25]; int main () { memset(a,1,sizeof(a)); memset(b,1,sizeof(b)); a[1]=0; a[2]=1; b[1]=1; b[2]=2; for(int i=3;i<=20;i++) { a[i]=(i-1)*(a[i-1]+a[i-2]); b[i]=b[i-1]*i; } int n,m; scanf("%d",&n); while(n--) { scanf("%d",&m); printf("%.2lf",a[m]/b[m]*100); printf("%c",'%'); printf("\n"); } return 0; }
2049
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; long long a[25],b[25]; int main () { memset(a,1,sizeof(a)); memset(b,1,sizeof(b)); b[0]=1; a[1]=0; a[2]=1; b[1]=1; b[2]=2; for(int i=3;i<=20;i++) { a[i]=(i-1)*(a[i-1]+a[i-2]); b[i]=b[i-1]*i; } int T,m,n; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); printf("%lld\n",(b[n]/b[m]/b[n-m]*a[m])); } return 0; }