来offer算法旗舰班
rand4生成rand6
给定一个 0-4随机数生成器 如何生成0-6随机数
这个题的难点在于如何保证数字出现的概率都是相等的。
0-6通过对7取余可以得到,那么就想办法凑对7取余的场景。
public class Frequency { public static int rand7(){ while(true){ int num=5*rand5()+rand5();//0-24 if(num<21) return num % 7; } } }//变形:如果用0-6随机生成器生成0-9随机数public class Frequency { public static int rand10(){ while(true){ int num=7*rand7()+rand7(); if(num<41) //排除41-48,因为他们不能生成9,会造成各个数字出现的概率不同 return num % 10; } } }