生成随机数, random 5, random 7

来源:互联网 发布:看图识番号软件下载 编辑:程序博客网 时间:2024/06/05 16:07

给定一个范围是1到5的随机整数生成器,设计一个范围是1到7的随机整数生成器。

解法:

int rand7(){    int vals[5][5] = {        { 1, 2, 3, 4, 5 },        { 6, 7, 1, 2, 3 },        { 4, 5, 6, 7, 1 },        { 2, 3, 4, 5, 6 },        { 7, 0, 0, 0, 0 }    };    int result = 0;    while (result == 0)    {        int i = rand5();        int j = rand5();        result = vals[i-1][j-1];    }    return result;}

很容易可以看出,只要rand5()是均匀的随机数,那么rand7()就是均匀的随机数。

但是在最坏情况下,rand7()可能会永远不停的循环下去。事实上,本题不存在常数时间的解法。

把上面的代码简化之后就可以得到下面的代码:

int i;do{  i = 5 * (rand5() - 1) + rand5();  // i is now uniformly random between 1 and 25} while(i > 21);// i is now uniformly random between 1 and 21return i % 7 + 1;  // result is now uniformly random between 1 and 7


0 0
原创粉丝点击