pongo(英雄会)题解之理想随机数发生器
2013-11-27 21:15
197 查看
不得感慨下本科没好好学习概率论,这道题用概率论很简单。
首先还是题目:
一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R(a), R(b),问R(a) + R(b) <= c的概率有多大?
输入: 正整数a,b,c。正整数均不超过10000
输出: R(a) + R(b) <= c的概率。注意输出是一个有理数(分数),请化为最简分数。(分子分母的最大公约数是1)。
例如 输入a = 1, b = 1, c = 4,输出"1/1"
这道题转换为概率论题目就是:x与y分别在[0,a]和[0,b]上服从均匀分布,并且x与y相互独立,求x+y<=z ,当z=c时的概率。
x与y分别在[0,a]和[0,b]上的概率密度为f(x)=1/a,f(y)=1/b;x与y相互独立,那么联合概率密度f(x,y)=1/(a*b) x属于[0,a]、y属于[0,b],
....
....
用图示如下(假如a>=b):
![](http://img.blog.csdn.net/20131127211405640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGh1X2V0ZXJuYWxjYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
就是求阴影部分的面积与矩形面积的比例,分c<=b、b<c<=a、a<c<a+b和c>=a+b四种情况求,记得最后需要约去公约数,即结果中的分子与分母的最大公约数为1,代码如下:
首先还是题目:
题目详情:
一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R(a), R(b),问R(a) + R(b) <= c的概率有多大?输入: 正整数a,b,c。正整数均不超过10000
输出: R(a) + R(b) <= c的概率。注意输出是一个有理数(分数),请化为最简分数。(分子分母的最大公约数是1)。
例如 输入a = 1, b = 1, c = 4,输出"1/1"
这道题转换为概率论题目就是:x与y分别在[0,a]和[0,b]上服从均匀分布,并且x与y相互独立,求x+y<=z ,当z=c时的概率。
x与y分别在[0,a]和[0,b]上的概率密度为f(x)=1/a,f(y)=1/b;x与y相互独立,那么联合概率密度f(x,y)=1/(a*b) x属于[0,a]、y属于[0,b],
....
....
用图示如下(假如a>=b):
就是求阴影部分的面积与矩形面积的比例,分c<=b、b<c<=a、a<c<a+b和c>=a+b四种情况求,记得最后需要约去公约数,即结果中的分子与分母的最大公约数为1,代码如下:
#include <stdio.h> #include <iostream> #include <string> #include<sstream> using namespace std; class Test { public: static int maxG(int a,int b){ while(b){ int mid=b; b=a%b; a=mid; } return a; } static string calculate (int a,int b,int c){ if(c>=a+b)return "1/1"; if(a<b){//for a>=b int mid =a; a=b; b=mid; } int res=0; int sqr=2*a*b; if(c<=b){ res=c*c; }else if(c>b&&c<=a){ //res=c*c-(c-b)*(c-b); res=b*(2*c-b); }else {//a<c<a+b //res=2*a*b-(a+b-c)*(a+b-c); res=2*c*(a+b)-a*a-b*b-c*c; } int maxGYS=1; while((maxGYS=maxG(sqr,res))>1){ res/=maxGYS; sqr/=maxGYS; } std::stringstream ss; ss<<res<<"/"<<sqr; std::string ret=ss.str(); return ret; } }; //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 int main(){ cout<<Test::calculate(1,3,2)<<endl; } //end //提示:自动阅卷结束唯一标识,请勿删除或增加。
相关文章推荐
- pongo(英雄会)题解之理想随机数发生器
- pongo(英雄会)题解之人人code,整数取反
- 庞果网--理想随机数发生器
- 英雄会(csdn pongo)题解之半质数的个数--2·14情人&元宵节专题
- pongo英雄会-幸运数题解
- pongo(csdn英雄会题解)之三元组的数量--英雄会第二届在线编程大赛·CSDN现场决赛
- 理想为什末这么近又那么远 为啥不能只看别人的文章偷懒,羡慕不能眼红,敢拼才是英雄
- [转]pongo英雄会-修路题解
- pongo(英雄会)题解之最少操作次数的简易版
- pongo(英雄会)题解之均分01
- 英雄会(csdn pongo)题解之二叉树
- 有理想的程序员必须知道的15件事
- 五个防护软件之间的对决,结局真不理想……
- 2015年理想行动计划
- 理想的程序员
- [BZOJ1047]HAOI2007理想的正方形|单调队列|DP
- 【iOS-Cocos2d游戏开发之十五】详解CCProgressTimer 进度条并修改cocos2d源码实现“理想”游戏进度条!
- 谈人生理想与个人实现
- 理想的应用框架
- 问题 A: 银河英雄传说--并查集训练T2