我想生成从-1到某个值k的随机整数。但是我想以-1的概率超过70%的方式来做。例如:- -1 2 -1 -1 6 -1 -1。 我这样做是为了对我的代码进行暴力测试。
答案 0 :(得分:2)
这应该做。如果生成的随机数介于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);
}
}
答案 1 :(得分:0)
这是使用<random>
的简短方法。
#include <random>
int biased_rand(int k, int prob)
{
static std::random_device rd;
static std::uniform_int_distribution<int> dist_prob(0, 100);
if (dist_prob(rd) <= prob)
return -1;
return std::uniform_int_distribution<int>(0, k)(rd);
}