Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Triển khai Rand10() từ Rand7() trong C++

Cho hàm rand7() sinh ngẫu nhiên đều 1..7. Viết rand10() sinh ngẫu nhiên đều 1..10 không dùng thư viện random.

Thuật toán (Rejection Sampling)

  1. Sinh số trong [0,48] bằng (rand7()-1)*7 + (rand7()-1).
  2. Nếu < 40 → trả về num % 10 + 1.
  3. Nếu ≥ 40 → lặp lại (loại bỏ bias).

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;

int rand7() { return 1 + rand() % 7; }

class Solution {
public:
    int rand10() {
        int rand40 = 40;
        while (rand40 >= 40) {
            rand40 = (rand7()-1)*7 + (rand7()-1);
        }
        return rand40 % 10 + 1;
    }
};

int main() {
    srand(time(NULL));
    Solution ob;
    cout << ob.rand10() << endl;
    cout << ob.rand10() << endl;
    cout << ob.rand10() << endl;
    return 0;
}

Đầu ra mẫu

2 2 6 (ngẫu nhiên)