3

どうすればいいですか?

これは私の試みです:

srand (time(NULL));
seed = ((double)rand()) / ((double)RAND_MAX) * 10 + 0.5;

また、0 と int x の間のランダムな整数を作成する方法は何ですか。[0,x]

4

3 に答える 3

11

C++11 の方法:

#include <random>

std::random_device rd;
std::default_random_engine generator(rd()); // rd() provides a random seed
std::uniform_real_distribution<double> distribution(0.1,10);

double number = distribution(generator);

整数のみが必要な場合は、代わりに次の分布を使用してください。

std::uniform_int_distribution<int> distribution(0, x);

C++11 は、この点で非常に強力で、よく設計されています。ジェネレーターはディストリビューションの選択から切り離されており、範囲が考慮され、スレッドセーフであり、パフォーマンスは良好であり、人々はすべてが正しいことを確認するために多くの時間を費やしました。その最後の部分は、あなたが思っているよりも正しく理解するのが難しい.

于 2013-10-29T08:03:30.277 に答える
2
srand (time(NULL));
seed = ((double)rand()) / ((double)RAND_MAX) * 9.9 + 0.1;

小数点以下 2 桁まで表示するには:

printf("%.2lf\n", seed);

x必要な が より小さい場合はRAND_MAX

seed = rand() % (x+1);

で整数を生成し[0, x]ます。

于 2013-10-29T08:00:22.210 に答える
0
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>

using namespace std;

float r(int fanwei)
{
    srand( (unsigned)time(NULL) ); 
    int nTmp =  rand()%fanwei;
    return (float) nTmp / 10;
}

int main(int argc, const char * argv[])
{
    cout<<r(100)<<endl; 
    return 0;
}
于 2013-10-29T08:41:30.120 に答える