2012-05-02 61 views
0

我想確保'網格'不能返回2個相同的值,但我不知道如何。這裏是我的代碼:連續獲取2個唯一編號?

grid[rnd(2,x-2) * y + rnd(2,y-2)].height = rnd(25,40);

int rnd(int min, int max) { 
    return min + rand() % (max - min + 1); 
} 

我也播種蘭特()與srand(time(NULL));

我希望我能提供更多的細節還是什麼我試過,但我不能完全找到與任何這個話題。

編輯:我當然可以做重新randoming,但我覺得這是不好的做法:/

+1

(僞)隨機性與唯一性正交。 – ildjarn

回答

6

如果你真的需要避免連續重複,所有你需要做的是通過以前的值進入你的函數,然後在循環中生成隨機數,直到它不同。

僞代碼:

int rnd(..., int prev) { 
    int y; 
    do { 
     y = rand() ...; 
    } while (y == prev); 
    return y; 
} 

需要注意的是,你可以或者保持prev作爲函數內的靜態變量。但是這會使它無法同時產生多個獨立的數據流。


1.在變得更具可預測性的意義上,這實際上使事情變得不那麼「隨機」。

+0

或洗牌一個唯一的列表,並從列表中選擇隨機值。 – KillianDS

+0

@KillianDS:確實。雖然我得到OP只是想避免*連續*重複的印象,所以像Fisher-Yates一樣的方法可能會在這裏過度。 –