随机函数randN()的相互表示
1.给一个rand6() 可以等概率返回1到6,只用这个函数写出可以等概率返回1到4的函数rand4()
2.给一个rand5() 可以等概率返回1到6,只用这个函数写出可以等概率返回1到4的函数rand7()
对于随机范围大的随机函数转换为随机范围小的随机函数(问题1)
int rand6(){
return rand()%6+1;
}
int rand4(){
int temp;
do{
temp = rand6();
}while(temp>4)//当大于4重新随机,能保证出现1~4的概率相同
}
对于随机范围小的随机函数转换为随机范围大的随机函数(问题2)
int rand5(){
return rand()%5+1;
}
int rand7(){
int temp;
do{
temp = (rand5()-1)*5 + rand5()-1;
}while(temp>=21)//保证出现0~20的概率相同,也就输出现0~6的概率相同
return temp%7 +1
}