2014-11-21 88 views
-3

我有這樣的:隨機數發生器沒有重複

for(int i=1; i<=6; i++) 
    cout<<rand()%48+1<<" "; 

如何修改這個劇本,所以沒有機會得到數的2倍以上? (所有數字都不能重複)

+1

創建一個範圍內所有值的數組,然後對其使用'std :: random_shuffle'。 – 2014-11-21 13:56:36

回答

0

沒有預定義的方法。如果你希望只在一個很小的值範圍有隨機數,你可以在陣列中每個數字的安全兩個副本,然後從陣列中採取隨機元素:

僞代碼:

AvailableNumbers = array(1, 1, 2, 2, ... 48, 48) 
// Shuffle the array: 
For i = 1 : 48 { 
    swap(AvailableNumbers[i], AvailableNumbers[rand(0, len(AvailableNumbers) - 1]) 
} 

// Take 6 elements: 
for i = 1 : 6 { 
    print pop(AvailableNumbers[i]) 
} 

哪裏流行是一個棧pop,它返回數組的第一個元素並將其刪除。