2014-02-26 80 views
1

如何生成一個包含一組連續數字但具有隨機順序的數組?例如,連續的數字是從8到100(不重複),我想要的是一個包含所有這些數字的數組,但序列是隨機的。以隨機順序連續編號

+0

聽起來就像洗牌一樣。 – jrok

+0

使用'std :: random_shuffle',看看這篇文章: http://stackoverflow.com/questions/21948091/how-to-generate-an-array-of-256-distinct-numbers/21948500# 21948500 – asamarin

+2

爲什麼你們不把你的評論發佈爲答案,而不是評論? – m01

回答

4

我想8和100都包含在範圍內。

#include <algorithm> 
#include <numeric> 
#include <iterator> 

int main() 
{ 
    const size_t N = 93; 
    int a[N]; 

    std::iota(std::begin(a), std::end(a), 8); 
    std::random_shuffle(std::begin(a), std::end(a)); 
} 

如果8是在您的文章錯字和你的意思是0,則該代碼將如下

const size_t N = 101; 
    int a[N]; 

    std::iota(std::begin(a), std::end(a), 0); 
+0

thx! 8不是拼寫錯誤〜 –

+0

什麼是'std :: itoa'?我無法在我的標準副本中找到它(並且通過它的參數看起來不像舊版Unices中這個名稱的功能)。 –

+0

@JamesKanze:http://www.cplusplus.com/reference/numeric/iota/ – lisyarus

0

我假設你是學生,新的節目,因此一些基本知識應該被告知。

rand()生成隨機數。

如果你想讓號碼在一個特定的範圍內,然後把它的mod例如

rand()%93; // generate random numbers from 0-92 

同樣, (RAND()%93)8 //將生成8-100

之間數此外,用於檢查重複您可以與那些已存儲在數組中比較數。

+0

與已經生成的數字相比可能非常慢,而且時間成本高度依賴於使用的僞隨機數生成算法。生成一個序列,然後洗牌是一個更好的主意,因爲它的時間成本是線性的。 – lisyarus

+0

如果一個數字(比如說0)在無限的時間之後產生了什麼? –