为了账号安全,请及时绑定邮箱和手机立即绑定

将随机范围从1-5扩展到1-7。

将随机范围从1-5扩展到1-7。

将随机范围从1-5扩展到1-7。给定一个在1到5范围内产生随机整数的函数,写一个在1到7范围内产生随机整数的函数。什么是简单的解决方案?什么是减少内存使用或在较慢的CPU上运行的有效解决方案?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超5个赞

这相当于AdamRosenfield的解决方案,但对一些读者来说可能更清楚一些。它假定RANRAN 5()是一个函数,它在1到5的范围内返回一个统计上的随机整数。

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;
}

它怎麽工作?想想看:想象一下,在纸上打印出这个二维数组,把它贴在一个飞镖板上,然后随机地向它扔飞镖。如果你碰到一个非零值,它是一个统计上的随机值,介于1到7之间,因为有相同数量的非零值可供选择。如果你击中了一个零,继续扔飞镖直到你击中一个非零。这就是这段代码所做的:i和j索引随机地在省道板上选择一个位置,如果我们得不到好的结果,我们就继续扔飞镖。

就像亚当说的,在最坏的情况下,这种情况可能会永远持续下去,但从统计学上说,最坏的情况*)


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 738 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信