srand(time(null));
printf("%d", rand());
Run Code Online (Sandbox Code Playgroud)
给出一个高范围的随机数(0-32000ish),但我只需要大约0-63或0-127,但我不知道如何去做.有帮助吗?
在一次采访中,我最初使用笔/纸解决了以下问题,然后通过程序验证结果.
问题如下:
有三个人A,B和C.每个人能够分别以6/7,4/5和3/4的概率击中目标.如果他们每次开火一次,他们中的两个会击中目标的几率是多少?
答案是:
P(...) = P(A)*P(B)*(1-P(C)) +
P(B)*P(C)*(1-P(A)) +
P(C)*P(A)*(1-P(B))
= 27.0/70.0
= 38.57142857142857142857142857142857142857....%
Run Code Online (Sandbox Code Playgroud)
以下是我对问题的解决方案:
#include <cstdio>
#include <cctype>
#include <ctime>
#include <random>
int main()
{
std::mt19937 engine(time(0));
engine.discard(10000000);
std::uniform_real_distribution<double> uniform_real(0.0,1.0);
double prA = (6.0 / 7.0);
double prB = (4.0 / 5.0);
double prC = (3.0 / 4.0);
std::size_t trails = 4000000000;
std::size_t total_success = 0;
for (std::size_t i = 0; i < trails; ++i)
{
int current_success = 0;
if (uniform_real(engine) < prA) ++current_success;
if (uniform_real(engine) < …Run Code Online (Sandbox Code Playgroud) 这是基于这个问题.提出了一些产生非均匀分布的答案,我开始想知道如何量化输出的非均匀性.我不是在寻找模式问题,只是单一价值方面.
接受的程序是什么?
我目前的想法是通过计算每个值的熵并采用加权平均来计算每次调用的平均Shannon熵.然后可以将其计算为预期值.
我担心的是
对于#1我想知道我是否正确.
对于#2,我担心的是我会处理大小如1/7 +/- 1e-18的数字而且我担心浮点错误会因为最小的问题而杀死我.计算的确切形式可能会导致一些主要的差异,我似乎记得有一些特殊日志案例的ASM选项,但我似乎无法找到关于此的文档.
在这种情况下,使用该范围的"良好"PRNG [1,n]并生成该范围的SRNG [1,m].问题是结果比输入差多少?
我所拥有的是每个输出值的预期发生率.
可能重复:
将随机范围从1-5扩展到1-7
我理解使用拒绝采样的解决方案,即
public static int rand7() {
while (true) {
int num = 5 * (rand5() - 1) + (rand5() - 1);
if (num < 21) return (num % 7 + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
但我正在考虑另一个解决方案,即rand5()被调用7次,结果除以5,但我不确定这是否正确.如果有或没有,请告诉我.
public static int rand7() {
int num = rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5();
return num/5;
}
Run Code Online (Sandbox Code Playgroud)
编辑:看起来生成1的概率是(1/5)^ 7但生成2的概率是7*(1/5)^ 7.它是不均匀的,所以它不会起作用.
这就是仅使用称重天平从一组硬币中找到假币的经典问题。为了完整起见,以下是此类问题的一个示例:
\n\n\n\n\n一个众所周知的例子有九个(或更少)物品,比如硬币(或球),除了一个之外,其他物品的重量相同,在这个例子中,它比其他物品轻\xe2\x80\x94a假货(一个奇怪的球)。只有在秤 \xe2\x80\x94 上称重才能感觉到差异,但只能称量硬币本身。是否可以仅通过两次称重来分离出假币?
\n
我们正在处理只有一枚硬币是假币的情况,并且我们知道它是怎么回事(即我们知道它更重/更轻)。
\n\nN我的问题是,是否有一种通用的有效算法来解决带有一枚假币的该问题的通用版本。我一直在考虑这个问题,到目前为止,我已经知道,如果N是 的形式3^k,那么您可以通过递归地将它们分成三个组来找到伪造品\xe2\x8c\x88log_3_(N)\xe2\x8c\x89。这对所有 N 人都是如此,而不仅仅是来自那些人吗3^k?如果是这样,我们能做得更好吗?
我需要C中的高质量随机数,但我不知道该怎么做.我需要能够从1-100获得数字.任何帮助或可能指向我可以找到帮助的地方.
我最近有一项任务要完成,我失败了.我通常不会问逻辑,但今天我很沮丧地问.这是任务.
我不允许使用php的rand()函数.相反,我可以使用此功能.
function getRandom()
{
return rand(1,5);
}
Run Code Online (Sandbox Code Playgroud)
好吧,我尝试了这个功能,但它必须返回3到7的值.
function getMoreRandom()
{
$value = getRandom();
return $value + 2;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须定义一个php函数,它可以返回范围为1到7的随机数.我该怎么做?
这是一个面试问题:
给定在[1,5]中生成随机数的函数,我们需要使用此函数生成范围[1,9]中的随机数.我考虑了很多,但我无法写出一个满足ramdomness的等式.人们请回答.这可能在将来的某些采访中有所帮助.