题目链接:

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提取出来。

先附上分数类模板

 struct Fraction//分数类
{
ll num, den;//num为分子,den为分母
Fraction(ll num = , ll den = )
{
if(den < )
{
num = -num;
den = -den;
}
assert(den != );//den=0程序终止
ll g = __gcd(abs(num), den);
this->num = num / g;
this->den = den / g;
}
Fraction operator + (const Fraction& o)const
{
return Fraction(num * o.den + den * o.num, den * o.den);
}
Fraction operator - (const Fraction& o)const
{
return Fraction(num * o.den - den * o.num, den * o.den);
}
Fraction operator * (const Fraction& o)const
{
return Fraction(num * o.num, den * o.den);
}
Fraction operator / (const Fraction& o)const
{
return Fraction(num * o.den, den * o.num);
}
bool operator < (const Fraction& o)const
{
return num * o.den < den * o.num;
}
bool operator == (const Fraction& o)const
{
return num * o.den == den * o.num;
}
};

注意输出格式(很伤)

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Fraction//分数类
{
ll num, den;//num为分子,den为分母
Fraction(ll num = , ll den = )
{
if(den < )
{
num = -num;
den = -den;
}
assert(den != );//den=0程序终止
ll g = __gcd(abs(num), den);
this->num = num / g;
this->den = den / g;
}
Fraction operator + (const Fraction& o)const
{
return Fraction(num * o.den + den * o.num, den * o.den);
}
Fraction operator - (const Fraction& o)const
{
return Fraction(num * o.den - den * o.num, den * o.den);
}
Fraction operator * (const Fraction& o)const
{
return Fraction(num * o.num, den * o.den);
}
Fraction operator / (const Fraction& o)const
{
return Fraction(num * o.den, den * o.num);
}
bool operator < (const Fraction& o)const
{
return num * o.den < den * o.num;
}
bool operator == (const Fraction& o)const
{
return num * o.den == den * o.num;
}
};
int main()
{
ll n, k, ans, cases = ;
while(cin >> n)
{
Fraction ans;
for(int i = ; i <= n; i++)
{
ans = ans + Fraction(n, i);
}
ll t = ans.num / ans.den;
ans.num -= t * ans.den;
if(ans.num == )
{
cout<<t<<endl;
}
else
{
string s;
stringstream ss, ss1;
ss << t;
ss >> s;
int kongge = s.size();
for(int i = ; i <= kongge; i++)cout<<" ";
cout<<ans.num<<"\n"; ss1 << ans.den;
ss1 >> s;
int duanxian = s.size();
cout<<t<<" ";
for(int i = ; i < duanxian; i++)cout<<"-";
cout<<"\n";
for(int i = ; i <= kongge; i++)cout<<" ";
cout<<ans.den<<"\n";
}
}
return ;
}

UVA 10288 Coupons---概率 && 分数类模板的更多相关文章

  1. UVA 10288 - Coupons(概率递推)

    UVA 10288 - Coupons option=com_onlinejudge&Itemid=8&page=show_problem&category=482&p ...

  2. uva 10288 Coupons (分数模板)

    https://vjudge.net/problem/UVA-10288 大街上到处在卖彩票,一元钱一张.购买撕开它上面的锡箔,你会看到一个漂亮的图案. 图案有n种,如果你收集到所有n(n≤33)种彩 ...

  3. 连分数(分数类模板) uva6875

    //连分数(分数类模板) uva6875 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 // 思路:直接上分数类模板.要注意ai可以小于0 #include <iostream> ...

  4. UVA 10288 Coupons (概率)

    题意:有n种纸片无限张,随机抽取,问平均情况下抽多少张可以保证抽中所有类型的纸片 题解:假设自己手上有k张,抽中已经抽过的概率为 s=k/n:那抽中下一张没被抽过的纸片概率为 (再抽一张中,两张中,三 ...

  5. Uva 10288 Coupons

    Description Coupons in cereal boxes are numbered \(1\) to \(n\), and a set of one of each is require ...

  6. UVa 10288 - Coupons(数学期望 + 递推)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. UVA 10288 Coupons 彩票 (数学期望)

    题意:一种刮刮卡一共有n种图案,每张可刮出一个图案,收集n种就有奖,问平均情况下买多少张才能中奖?用最简的分数形式表示答案.n<=33. 思路:这题实在好人,n<=33.用longlong ...

  8. uva10288 Coupons 【概率 分数】

    题目: 题意: 一共n种不同的礼券,每次得到每种礼券的概率相同.求期望多少次可以得到所有n种礼券.结果以带分数形式输出.1<= n <=33. 思路: 假设当前已经得到k种,获得新的一种的 ...

  9. C++STL - 类模板

    类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板   1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...

随机推荐

  1. 把IP字符串转换为IPv4标准格式

    把IP字符串转换为IPv4标准格式,如一个IP为127.0.0.1转为127.000.000.001格式? 即是说“点”分隔的数据不够三位数字长度,转换为三位数字长度. Insus.NET有尝试写了一 ...

  2. Swift函数_默认参数

    swift中提供了默认参数功能,在声明函数时给参数指定默认值. 例: func inputStudentInfo(name:String,age:Int="26") { print ...

  3. Linux NTP时间服务器

    NTP 时间服务器 ntp也是一种协议 ntp软件(支持ntp协议)  CentOS6自带 CentOS7需要安装 chrony软件(支持ntp协议)   CentOS7自带 安装ntp CentOS ...

  4. Spring 学习(四)--- AOP

    问题 : AOP 解决的问题是什么 Spring AOP 的底层实现是什么 Spring AOP 和 AspectJ 的区别是什么 概述 在软件业,AOP为Aspect Oriented Progra ...

  5. UML 简介笔记

    1. UML 是什么? UML 统一建模语言是一组图形表示法,可以帮助描述和设计软件系统,特别是使用面向对象 OO 风格建造的软件系统. 2. 使用 UML 的方式 UML 有 3 种使用模式:草稿, ...

  6. 创建Web项目运行时出小错误及解决方法

    1.目录结构 2.各文件内容 index.jsp <%@ page contentType="text/html;charset=UTF-8" language=" ...

  7. Dubbo(二) 一次惨痛的流血事故

    时间定位到2018年11月某某一天,我正在看看Spring源码的文档,趁着没啥事,忽然想起Dubbo是基于Schema扩展的,所以就翻了下Dubbo的源码. 然后的然后,有活要干了,写完代码后,启动工 ...

  8. Java:反射与代理

    Java世界的繁荣反射这一特性有很大功劳,可以获取全面的类型信息. /** * */ package ref; import java.lang.reflect.Field; import java. ...

  9. Oracle数据库RowId

    RowId是什么? RowId是根据每一行数据的物理信息地址编码而成的一个位列,利用RowId可以快速定位到某一行. Oracle数据库编辑数据必须查出RowId,可以根据如下语句查询: select ...

  10. PHP获取本地时间

    使用date ( "Y-m-d H:i:s" )函数获取当前时间,总是不对,原来默认是格林威治时间,解决的办法有两个: 1.获取之前先加   date_default_timezo ...