题目描述
思路
拒绝采样,通过多次采样进行分布计算。个人思路是采样10次,范围10~70;均匀分布,取余10 + 1,得到要求
大神思路 概率拒绝采样1/2 * 1/5 , 通过两次采样来拒绝部分达到要求,最快。
代码
// The rand7() API is already defined for you.
// int rand7();
// @return a random integer in the range 1 to 7
class Solution {
public:
int rand10() {
/*
int sum=0;
for(int i=0;i<10;i++)
{
sum += rand7();
}
return sum%10+1;*/
/*
int a=rand7()-1,b=rand7()-1;
int sum = a*7+b;
if(sum>39)
return rand10();
return sum%10+1;*/
/*
int a=rand7(),b=rand7();
if(a<4&&b>4)
return rand10();
return (a+b)%10 + 1;*/
int a=rand7(),b=rand7();
while(a==7)
a = rand7();
while(b>5)
b = rand7();
return (a&1>0?0:5) + b;
}
};
重难点分析
第三部分最快,最难想到。采样问题,记得排列组合。