2017-07-18 87 views
1

對於我的班級任務,我必須生成從100-500範圍內的120個隨機數。這是我現在使用的代碼。
下面是輸出的剪切和粘貼:我期望數字範圍在100到500之間。我不確定我做錯了什麼。我沒有得到理想的結果。我如何解決它以獲得100-500的數字?需要生成從100到500的隨機數

ran -10 ran -9 ran -9 ran -8 ran -7 ran -6 ran -6 ran -5 ran -4 ran -4 ran -4 ran -2 ran -1 ran -1 ran 1 ran 1 ran 1跑2跑3跑3跑4跑4跑4跑5跑6跑出6跑出6跑出7上陣7上陣8跑8跑出9跑出9跑出10跑出10跑出10跑11

void create_random_numbers(int ran[], int x) 
{ 
    unsigned seed = time(0); 

    srand(seed); 
    int random_integer; 
    for (int index = 0; index<400; index++) 
    { 

    // cout << random_integer << endl<<endl; 
     ran[index] = (rand()%500)+100; 

     cout << "ran "<< ran[index] << endl << endl; 
    } 

} 
+1

好的,這是什麼問題? –

+0

下面是輸出的剪切和粘貼:我期望數字範圍在100到500之間。我不確定我做錯了什麼。我沒有得到理想的結果。跑-10 跑-9 跑-9 跑-8 跑-7 跑-6 跑-6 跑-5 跑-4 跑-4 跑-4 跑-2 跑 - 1 跑-1 跑1 跑1 跑2 跑3 跑3 跑4 跑4 跑4 跑5 跑6 跑6 跑6 跑了7 跑了7 跑了8 跑了8 跑出9 跑出9 跑出10 跑出10 跑出10 跑了11 – jess

+1

@jess您還沒有問了一個問題呢。請相應地編輯帖子。 (如果你想顯示一些輸出,更新你的文章) – KyrSt

回答

0

rand() % 500產生的值在包括[ 0...499 ]的範圍內,因此100 + [ 0 ... 499 ]產生值[ 100... 599 ](含)。您需要rand() % 400 + 100

看看下面的校正代碼:

void create_random_numbers(int ran[]) 
{ 
    unsigned seed = time(0); 

    srand(seed); 
    int random_integer; 
    for (int index = 0; index < 120; index++) 
    { 
     ran[index] = (rand() % 400) + 100; 
     cout << index << " : " << ran[index] << endl << endl; 
    } 
} 

查看我已演示:Demo

+1

哇,這很快。它的工作原理!非常感謝。我從昨天開始就一直在做這件事,並在第一次嘗試時就這樣寫下來,但顯然我的語法一定是錯誤的。 – jess

+0

很高興幫助:) –

+0

雖然這種解決方案不會一致。 – rustyx

2

另一種方法是使用均勻INT分佈 產生了隨機的整數值I,在均勻地分佈閉區間[a,b],即根據離散概率分佈

function 
P(i|a,b) = 1/(b − a + 1) 
. 
#include <random> 
#include <iostream> 
#include <array> 

int main() 
{ 
    std::array<int, 120> numbers; 
    std::random_device rd; //Will be used to obtain a seed for the 
          //random number engine 
    std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded 
          // with rd() 
    std::uniform_int_distribution<> dis(100, 500); 

    for (int n = 0; n < 120; ++n) 
     //Use dis to transform the random unsigned int generated by gen 
     //into an int in [100, 500] 
     numbers[n] = dis(gen); 

    for (auto i : numbers) { 
     std::cout << ' ' << i; 
    } 
    std::cout << '\n'; 
    return 0; 
} 
+0

在發佈我的問題之前,我確實使用了統一的int分佈方法,它確實有效。然而,我不知道一種方法來獲取生成的值到我的數組中。我試過std :: myarray [] << dis(gen)<<;但正在變得垃圾。我將如何能夠捕獲生成的值?這將是很好的知道未來的用途。 – jess

+0

再次感謝您的幫助。 – jess

+0

@ jess現在更新代碼以將其保存到數組 –