用rand7() 实现 rand10()
题目:
已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数。
思路:
假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢?
方法一:
rand10可以通过对10取余+1得到。rand7()-1产生0~6,7*(rand7()-1)产生[0,7,14,21,28,35,42],再加rand7()-1得到0~49,舍去大于等于40的部分即可。
int rand10() { int res = 40; while (res >= 40) res = 7 * (rand7() - 1) + (rand7() - 1); return res % 10 + 1; }
方法二:
//为了方便,粘贴自评论区。 /* a 1 2 3 4 5 6 7 b 1 2 3 4 5 6 7 8 2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 0 4 5 6 7 8 9 0 1 5 6 7 8 9 0 1 2 6 7 8 9 0 1 2 3 7 8 9 0 1 2 3 4 去掉右上角的 6 7 8 7 8 9 8 9 0 后 每个数字的出现次数为4次,0-9的概率相同 */ int rand10() { int a = rand7(), b= rand7(); while( 1){ if( !(a > 4 && b < 4)) break; a = rand7(), b= rand7(); } return (a+b) %10 + 1; }