首页 > 解决方案 > 有偏随机数生成

问题描述

我想生成从-1到某个值k的随机整数。但我想以一种方式做到这一点,即获得 -1 的概率高于 70%。例如:- -1 2 -1 -1 6 -1 -1。我这样做是为了针对蛮力方法测试我的代码。

标签: c++math

解决方案


这应该做。如果您生成一个介于 0 和 100 之间的随机数并且它小于概率(在本例中为 n),则 getProb 返回 true 并且您有 -1。否则,只需生成另一个以 k 为模的随机数

#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <vector>
using namespace std;

bool getProb(int n) {
    return (rand() % 101) < n;
}

int main() {
    srand(time(NULL));
    int probab = 75;
    int k = 10;
    vector<int> res;
    for (int i = 0; i < 100; i++) {
        if (getProb(probab)) res.push_back(-1);
        else res.push_back(rand() % k);
    }
}

推荐阅读