【ACM刷题录】UVa10288 Coupons
2017-06-01 18:58
351 查看
【题目与出处】
题目:Coupons
出处:UVa 10288
【题意概述】
描述:一共有n种不同的Coupons,每次得到每种Coupons的概率相同。问期望多少次可以得到所有的n种Coupons,以带分数形式输出。
数据范围:1<=n<=33
【算法分析】
该题目涉及到求数学期望,可以采用分治法的思想,每一次在上一次的期望下得到最新的期望。当已经有k种Coupons得到时,得到新的Coupons的概率为(n-k)/n,期望值为n/(n-k),所以可以得出总步数的期望值为:。
【代码实现】
代码实现为java实现
package
main;
public
class Coupons {
public
static
class Fraction{
//分子
public
long
numerator;
//分母
public
long
denominator;
public Fraction(long
numerator,
long
denominator){
this.numerator
= numerator;
this.denominator
= denominator;
}
public
void add(Fraction
frac){
long
num1 =
this.numerator
* frac.denominator;
long
num2 =
this.denominator
* frac.numerator;
long
theNumerator =
num1+num2;
long
theDenominator =
this.denominator
* frac.denominator;
this.numerator
= theNumerator;
this.denominator
= theDenominator;
release();
}
public
void show(){
System.out.println(this.numerator
+ "/" +
this.denominator);
}
//辗转相除法求进行约分
private
void release(){
long
tempBig =
this.numerator
> this.denominator
? this.numerator:this.denominator;
long
tempSmall =
this.numerator
< this.denominator
? this.numerator:this.denominator;
long
temp;
while(tempBig
% tempSmall != 0){
temp =
tempBig %
tempSmall;
tempBig =
tempSmall;
tempSmall =
temp;
}
temp =
tempSmall;
this.numerator
= this.numerator
/ temp;
this.denominator
= this.denominator
/ temp;
}
}
public
static Fraction coupons(long
n){
Fraction answer =
new Fraction(0,1);
for(long
i=0;
i<n;
i++){
answer.add(new
Fraction(n,
n-i));
}
answer.show();
return
answer;
}
public
static
void main(String
args[]){
coupons(33);
}
}
题目:Coupons
出处:UVa 10288
【题意概述】
描述:一共有n种不同的Coupons,每次得到每种Coupons的概率相同。问期望多少次可以得到所有的n种Coupons,以带分数形式输出。
数据范围:1<=n<=33
【算法分析】
该题目涉及到求数学期望,可以采用分治法的思想,每一次在上一次的期望下得到最新的期望。当已经有k种Coupons得到时,得到新的Coupons的概率为(n-k)/n,期望值为n/(n-k),所以可以得出总步数的期望值为:。
【代码实现】
代码实现为java实现
package
main;
public
class Coupons {
public
static
class Fraction{
//分子
public
long
numerator;
//分母
public
long
denominator;
public Fraction(long
numerator,
long
denominator){
this.numerator
= numerator;
this.denominator
= denominator;
}
public
void add(Fraction
frac){
long
num1 =
this.numerator
* frac.denominator;
long
num2 =
this.denominator
* frac.numerator;
long
theNumerator =
num1+num2;
long
theDenominator =
this.denominator
* frac.denominator;
this.numerator
= theNumerator;
this.denominator
= theDenominator;
release();
}
public
void show(){
System.out.println(this.numerator
+ "/" +
this.denominator);
}
//辗转相除法求进行约分
private
void release(){
long
tempBig =
this.numerator
> this.denominator
? this.numerator:this.denominator;
long
tempSmall =
this.numerator
< this.denominator
? this.numerator:this.denominator;
long
temp;
while(tempBig
% tempSmall != 0){
temp =
tempBig %
tempSmall;
tempBig =
tempSmall;
tempSmall =
temp;
}
temp =
tempSmall;
this.numerator
= this.numerator
/ temp;
this.denominator
= this.denominator
/ temp;
}
}
public
static Fraction coupons(long
n){
Fraction answer =
new Fraction(0,1);
for(long
i=0;
i<n;
i++){
answer.add(new
Fraction(n,
n-i));
}
answer.show();
return
answer;
}
public
static
void main(String
args[]){
coupons(33);
}
}
相关文章推荐
- UVA 10288 - Coupons(概率递推)
- uva10288 Coupons 【概率 分数】
- UVA - 10288 Coupons
- Uva 10288 - Coupons
- UVa10288 - Coupons(避免高精度的优美姿势)
- uva 10288 - Coupons(概率)
- UVA 10288 Coupons 彩票 (数学期望)
- UVa10288 - Coupons 【数学】
- uva 10288 Coupons
- [UVA10288] Coupons && 数学期望
- UVA - 10288 Coupons (概率+递推)
- UVA10288 - Coupons (概率+递推)
- UVA - 10288 Coupons
- UVA 10288 Coupons
- UVa 10288 Coupons
- Uva 10288 Coupons
- uva 10288 Coupons 数学期望
- UVA 10288 - Coupons
- uva 10288 Coupons 概率
- uva 10288 Coupons (分数模板)