已知rand7,构造rand10

思路: 要构造1~10 区间上的均匀分布整数,先保证x均匀散布在区间1~10*n,那么做一次缩放x%10+1 , 就把x投影到1~10 的区间内了。
按照这个思路,rand7 产生1~7的数, rand7()-1 产生06的数,乘以7就是0�42的区间,把这个结果和rand7相加,产生149的区间随机数。接着把4149的数剔除,就是上面讨论的结果。

int rand10(x)
{
   int x;

   do{
   x = (rand7() - 1)*7 + rand7();
  }while(x > 40);

  return x%10 + 1;
}

你可能感兴趣的:(已知rand7,构造rand10)