纯纯的数学期望
解题思路大概有两种
第一种:
第二种:
但两种方法最后都是一个公式:
n*(1/1+1/2+···+1/n)
然后注意一下题目要求的复杂的输出格式和各种细节什么的
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define LL long long
using namespace std;
int n,num,knum;
LL fz,fm=1,z;
inline LL gcd(LL x,LL y){
if(y==0) return x;
return gcd(y,x%y);
}
inline int s(LL x){
int c=0;
while(x>0){
x/=10;
c++;
}
return c;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
LL d=gcd(fm,i);
fz=fz*(i/d)+n*fm/d;
fm=i/d*fm;
LL r=gcd(fz,fm);
fz/=r; fm/=r;
}
if(fz>=fm){
z=fz/fm;
fz=fz-z*fm;
}
if(fz==0) printf("%lld",z);
else{
num=s(fm);
knum=s(z);
for(int i=1;i<=knum;i++) printf(" ");
printf("%lld\n%lld",fz,z);
for(int i=1;i<=num;i++) printf("-");
printf("\n");
for(int i=1;i<=knum;i++) printf(" ");
printf("%lld",fm);
}
return 0;
}