hdu1099其实并不能算是水题,想了好久好久的
题意
就是说你有n种彩票,现在想积齐n种,问等概论的情况下,你平均要买多少张
下面说一下自己的思路
已经买了i张时,买中剩下的概率为(n-i)/n,则要买的张数为n/(n-i)
所以呢要买(n/n+n/n-1+n/n-2+............n/1)
然后呢留给我的就是写很长的代码这个来求这个整数或者带分数
先写到这,回头继续写代码
#include<iostream>
#include<cstdio>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int n,i;
long long sum;
long long fenzi,fenmu,fenmu1,fenzi1,n1,n2;
int h,k;
while(cin>>n){
h=k=0;
sum=0;
fenzi=n;
fenmu=1;
for(i=1;i<n;i++){
fenmu1=fenmu;
fenmu=((i+1)*fenmu1)/gcd(fenmu1,i+1);
fenzi=fenzi*fenmu/(fenmu1)+n*fenmu/(i+1);
sum+=fenzi/fenmu;
fenzi=fenzi%fenmu;
fenzi1=fenzi;
fenzi=fenzi1/gcd(fenzi1,fenmu);
fenmu=fenmu/gcd(fenzi1,fenmu);
}
if(fenzi==0){
cout<<sum<<endl;
}
else{
n1=sum;
n2=fenmu;
while(n1!=0) { h++; n1/=10; }
while(n2!=0) { k++; n2/=10; }
for(i=0;i<=h;i++) printf(" ");
printf("%I64d\n",fenzi);
printf("%I64d ",sum);
for(i=0;i<k;i++) printf("-");
printf("\n");
for(i=0;i<=h;i++) printf(" ");
printf("%I64d\n",fenmu);
}
} return 0;
}
浙公网安备 33010602011771号