牛客 16138 愤怒的巨巨(期望,gcd)

链接:https://ac.nowcoder.com/acm/problem/16138
来源:牛客网
题目描述
在511没人敢惹盼成巨巨,因为盼成巨巨是我们511的学神!   周末,巨巨让乙超大佬去买一根香蕉,可你是知道的,买来的香蕉很可能是坏的,经过乙超大佬的长期调研,源源家香蕉中次品率为p,因为乙超超BYQ(too you qian),如果买到坏香蕉,他会认栽,但他害怕巨巨愤怒,他会继续买下去,直到买到好香蕉为止!    他想知道他必须买香蕉的个数的期望值,如果注定他买不到好香蕉请输出 ”Sorrry,JuJu!” 
输入描述:
输入实数p (0≤p≤1且保证p的小数位不超过6)
输出描述:
输出一行:如果买不到好香蕉,输出”Sorrry,JuJu!(忽略双引号)否则输出期望值的最简分数形式:c/d;
示例1
输入
复制
0.5
输出
复制
2/1
示例2
输入
复制
1.00
输出
复制
Sorrry,JuJu!

就是求1/(1-p)的分数形式,但是我个人感觉在精确度上有点离谱。

#include <iostream>

using namespace std;

int GCD(int num1, int num2)
{
    while(num2)
    {
        int temp = num1 % num2;
        num1 = num2;
        num2 = temp;
    }
    return num1;
}
int main()
{
    float p;
    cin>>p;
    if(p == 1)
        cout<< "Sorrry,JuJu!" <<endl;
    else
    {
        int num1 = 1000000, num2 = 1000000 - 1000000 * p,gcd  = GCD(num1 , num2);
        //这里必须用10000 - 1000000 * p,不然过不了,不太明白1e6和1000000的区别。
        //还有必须把1000000 * (1 - p)乘开计算,不然有误差(虽然我还是不明白怎么有误差,不是不超过6位吗)
        cout<< num1 / gcd << '/' <<num2 / gcd <<endl;
    }
    return 0;
}

Cu1
发布了30 篇原创文章 · 获赞 2 · 访问量 959

猜你喜欢

转载自blog.csdn.net/CUCUC1/article/details/104912878