Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在特定问题中使用rand()函数?_C++ - Fatal编程技术网

C++ 在特定问题中使用rand()函数?

C++ 在特定问题中使用rand()函数?,c++,C++,该函数的范围为0-32767。我们必须在这个范围内生成随机数,并计算生成的每个数的平均值,它将恰好等于16383.5。在这个问题中,我们需要找到调用Rand()函数来产生average=16383.5+-0.0001的最小时间 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { double x,avg = 0,n=1;

该函数的范围为0-32767。我们必须在这个范围内生成随机数,并计算生成的每个数的平均值,它将恰好等于16383.5。在这个问题中,我们需要找到调用Rand()函数来产生average=16383.5+-0.0001的最小时间

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    double x,avg = 0,n=1;
    while(n<=1000){
          x = (rand() % (32767 + 1 ) + 0) ;
          avg = x/n;
          if((avg == (16383.5+0.0001))||(avg == (16383.5-0.0001))){
          break;
          }
          n++;
    }
    cout<<n<<endl<<y<<endl;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
双x,平均值=0,n=1;

虽然(n您的原始帖子没有计算任何平均值,因为它没有计算任何要除以
n
的和。无和=无平均值计算。此外,您的中断检查表达式是错误的。它正在寻找两个值的精确匹配,您的任务是等待结果在16383.5+/-0.0001范围内。最后,一个小错误是int,你从来没有种子兰德,所以不要期待任何东西,但相同的答案重复

正确地(足够地)做到这一点,如下所示:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    double sum = 0;
    int n = 1;
    for (;; ++n)
    {
        double x = std::rand() % 32768;
        sum += x;
        double avg = sum / n;
        if ((avg <= 16385.5 + 0.0001) && (avg >= 16383.5 - 0.0001))
            break;
    }
    std::cout << n << '\n';
}

你没有计算平均值。<代码> x/n < /代码>给出最后一个兰德值除以读取的值的数目。除非你刚好在第一个兰德上的16384,或者第二个兰特上的32767个,你希望的范围内的所有希望都消失了。考虑一下缺少什么……嗯,我想让我试试,然后我会分享智慧。如果它有效,请告诉你。它仍然不起作用…
x=(rand()%(32767+1)+0);sum+=x;avg=sum/n;
你在寻找精确匹配;这不是任务。你应该寻找平均值是否在16383.5+/-0.0001范围内。想想这与你所做的有什么不同。值得一提的是:
n
不一定对每个程序运行都一样,因为
srand
用不同的种子喂养……嗯,只是想知道:一些不走运的种子可能会产生16385-n和16385+n+1或16385-n+1和16385+n作为序列的前两个元素,产生n==2的输出。。。
351