有没有更好的算法来做以下事情?
我试图生成50个可被7整除的随机数.然后我随机选择其中一个并返回该数字.
是否有更有效/更好的方法来随机生成可被7整除的数字?有没有更好的方法来编码/执行此操作?
unsigned int generateRandomNumberDivisibleByN( unsigned int n, unsigned int num=10 )
{
// Post: Generate many different random numbers that are divisible by n, then randomly select one of
// of those numbers to return.
unsigned int potentialNums[num];
for (int i=0, j=2; i<num; i++, j=rand()%INT_MAX)
{
potentialNums[i] = j*n;
}
return potentialNums[ rand()%num ]; // should this be rand()%(num-1) so it never returns an invalid array index?
}
Run Code Online (Sandbox Code Playgroud)
Mys*_*ial 13
为什么你不能这样做?
return (rand() % MAX) * 7;
Run Code Online (Sandbox Code Playgroud)
它几乎完全相同.
哪里MAX小到足以避免在乘法7期间溢出.您可以定义为:
const MAX = INT_MAX / 7;
Run Code Online (Sandbox Code Playgroud)
或者如果你想要它快,你可以做类似的事情:
return (rand() & 0xff) * 7;
Run Code Online (Sandbox Code Playgroud)
随机生成一个可被7整除的数字的最有效方法是生成一个随机数,然后乘以7.
return ( rand() % ( INT_MAX / 7 ) ) * 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |