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

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

给定一个在1到5范围内产生随机整数的函数,写一个在1到7范围内产生随机整数的函数。

  1. 什么是简单的解决方案?
  2. 什么是减少内存使用或在较慢的CPU上运行的有效解决方案?


慕无忌1623718
浏览 781回答 3
3回答

慕勒3428872

这相当于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索引随机地在省道板上选择一个位置,如果我们得不到好的结果,我们就继续扔飞镖。就像亚当说的,在最坏的情况下,这种情况可能会永远持续下去,但从统计学上说,最坏的情况*)
打开App,查看更多内容
随时随地看视频慕课网APP