生成不重複的隨機數 常考面試題

2021-05-28 11:49:40 字數 483 閱讀 8991

#include

#include

#define n 100

int a[n];//結果陣列

void swap(int& i,int& j)

int main()

srand(unsigned(time(null)));

for(i=n-1; i>0; i--)

return 0;

}解決思路:

這個問題的實際應用就比如要隨機生成一副撲克牌,54張,順序是亂的,但顯然牌面不能重複。用隨機數生成器生成的數總是會重複的,所以,不能把生成的數直接儲存下來作為結果。那麼怎麼辦?

你想想,如果是真實的撲克牌,你是怎麼打亂的?你會說:洗牌啊!沒錯,就是洗牌!洗牌是什麼過程?說白了,是交換!把兩摞牌交換位置,用類似的方法就可以解決樓主的問題。

先按順序在陣列裡生成1-100的數,然後產生一對0-99之間的隨機數,把這兩個數所表示下標的數交換位置,如此重複幾十次,原先的陣列就被打亂了。

不重複隨機數生成

直接上 生成 0,total 的隨機數 最大隨機數 ilist private static ilistgetrandomsequence int total random random new random for var i listbase.count 1 i 0 i return listo...

生成不重複的隨機數

思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機 數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數 代替。int index n...

隨機數生成(永不重複)

public class randomtreeutils char chars new char char chars new char int treedeeps chars.length int key 7 最多生成7位數 if treedeeps key 返回樹形 arraylist tree...