【游戏算法】随机函数randN()的相互表示

随机函数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
}
原文地址:https://www.cnblogs.com/garychen97/p/13823909.html