zoukankan      html  css  js  c++  java
  • UVA 10288 Coupons---概率 && 分数类模板

    题目链接:

    https://cn.vjudge.net/problem/UVA-10288

    题目大意:

    一种刮刮卡一共有n种图案,每张可刮出一个图案,收集n种就有奖,问平均情况下买多少张才能中奖?用最简的分数形式表示答案。n<=33。

    解题思路:

    假设现在已刮到k个图案了,刮到新图案的概率是(n-k)/n,即若要再收集一个新图案平均要刮s=n/(n-k)次。所以只需要穷举k=1 to n,累加s的和就行了。注意式子可以将分子n提取出来。

    先附上分数类模板

     1 struct Fraction//分数类
     2 {
     3     ll num, den;//num为分子,den为分母
     4     Fraction(ll num = 0, ll den =  1)
     5     {
     6         if(den < 0)
     7         {
     8             num = -num;
     9             den = -den;
    10         }
    11         assert(den != 0);//den=0程序终止
    12         ll g = __gcd(abs(num), den);
    13         this->num = num / g;
    14         this->den = den / g;
    15     }
    16     Fraction operator + (const Fraction& o)const
    17     {
    18         return Fraction(num * o.den + den * o.num, den * o.den);
    19     }
    20     Fraction operator - (const Fraction& o)const
    21     {
    22         return Fraction(num * o.den - den * o.num, den * o.den);
    23     }
    24     Fraction operator * (const Fraction& o)const
    25     {
    26         return Fraction(num * o.num, den * o.den);
    27     }
    28     Fraction operator / (const Fraction& o)const
    29     {
    30         return Fraction(num * o.den, den * o.num);
    31     }
    32     bool operator < (const Fraction& o)const
    33     {
    34         return num * o.den < den * o.num;
    35     }
    36     bool operator == (const Fraction& o)const
    37     {
    38         return num * o.den == den * o.num;
    39     }
    40 };

    注意输出格式(很伤)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 struct Fraction//分数类
     5 {
     6     ll num, den;//num为分子,den为分母
     7     Fraction(ll num = 0, ll den =  1)
     8     {
     9         if(den < 0)
    10         {
    11             num = -num;
    12             den = -den;
    13         }
    14         assert(den != 0);//den=0程序终止
    15         ll g = __gcd(abs(num), den);
    16         this->num = num / g;
    17         this->den = den / g;
    18     }
    19     Fraction operator + (const Fraction& o)const
    20     {
    21         return Fraction(num * o.den + den * o.num, den * o.den);
    22     }
    23     Fraction operator - (const Fraction& o)const
    24     {
    25         return Fraction(num * o.den - den * o.num, den * o.den);
    26     }
    27     Fraction operator * (const Fraction& o)const
    28     {
    29         return Fraction(num * o.num, den * o.den);
    30     }
    31     Fraction operator / (const Fraction& o)const
    32     {
    33         return Fraction(num * o.den, den * o.num);
    34     }
    35     bool operator < (const Fraction& o)const
    36     {
    37         return num * o.den < den * o.num;
    38     }
    39     bool operator == (const Fraction& o)const
    40     {
    41         return num * o.den == den * o.num;
    42     }
    43 };
    44 int main()
    45 {
    46     ll n, k, ans, cases = 0;
    47     while(cin >> n)
    48     {
    49         Fraction ans;
    50         for(int i = 1; i <= n; i++)
    51         {
    52             ans = ans + Fraction(n, i);
    53         }
    54         ll t = ans.num / ans.den;
    55         ans.num -= t * ans.den;
    56         if(ans.num == 0)
    57         {
    58             cout<<t<<endl;
    59         }
    60         else
    61         {
    62             string s;
    63             stringstream ss, ss1;
    64             ss << t;
    65             ss >> s;
    66             int kongge = s.size();
    67             for(int i = 0; i <= kongge; i++)cout<<" ";
    68             cout<<ans.num<<"
    ";
    69 
    70             ss1 << ans.den;
    71             ss1 >> s;
    72             int duanxian = s.size();
    73             cout<<t<<" ";
    74             for(int i = 0; i < duanxian; i++)cout<<"-";
    75             cout<<"
    ";
    76             for(int i = 0; i <= kongge; i++)cout<<" ";
    77             cout<<ans.den<<"
    ";
    78         }
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    canvas_13 绘制图像
    canvas_12 径向渐变
    银行卡账号识别
    python sort
    直方图 与 均衡化
    轮廓检测 与 模板匹配
    Canny边缘检测
    pytorch opencv基础
    全局特征、局部特征 maxpool
    One-shot learning
  • 原文地址:https://www.cnblogs.com/fzl194/p/9381797.html
Copyright © 2011-2022 走看看