0 n 1個數中隨機選m個數

2022-05-02 22:09:07 字數 527 閱讀 2113

給定乙個n, 乙個m, 要求從0..n-1個數中隨機選取m個數。

這裡參考《程式設計珠璣》中的乙個方法,既利用概率測試來進行選取。假設我們要從0到100中選取10個數。首先考慮0,我們選取它的概率為10/100 = 1/10,因此我們可以產生乙個隨機數(應該遠遠大於n),利用該數模100的值是否小於10來模擬選取0的情況。接著考慮1,這時我們應該根據0是否被選取來考慮其被選中的概率。

給出**,補充了書中的bigrand的實現以及迴圈做了一點點改動。

1 #include

2 #include

3 #include45

int range_num;

67 unsigned int bigrand(void)

1112

int main(void)

23 remaining--;

24 }

2526 printf("

\n");

27return

0;28 }

N 末尾0個數

分析 一般類似的題目都會蘊含某種規律或簡便方法的,階乘末尾乙個零表示乙個進製,則相當於乘以10而10 是由2 5所得,在1 100當中,可以產生10的有 0 2 4 5 6 8 結尾的數字,顯然2是足夠的,因為4 6 8當中都含有因子2,所以都可看當是2,那麼關鍵在於5的數量了那麼該問題的實質是要求...

產生 0 n 1 範圍內的 m 個隨機整數

產生 0 n 1 範圍內的 m 個隨機整數的有序列表,且不允許重複,m n 注 參考 一書 include include include include using namespace std 產生較大的隨機數 int bigrand 隨機返回m,n之間的整數。int randint int m,...

計算乙個數中1的個數 0的個數

1.求乙個int數二進位制中1的個數 1 與1 右移 正數 負數都可以 計算的是負數補碼中1的個數 inta cin a int count 0 int n sizeof int 8 位數for int i 0 i a 1 右移一位 cout 2 右移相當於除以2 判斷最低位可用2取餘 右移可用除以...