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;

}

posted on 2015-05-08 20:55  AC_WQYYY  阅读(114)  评论(0)    收藏  举报

导航