概述
/*************************************************************************
*File Name: GetRandomNumWithWeight.cpp
*Author: ning
*mail: 304342171@qq.com
*Created Time: Fri 15 May 2020 03:16:43 PM CST
************************************************************************/
#include <iostream>
#include <vector>
#include <numeric>
#include <ctime>
#include <cstdlib>
using std::vector;
using std::rand;
using std::srand;
using std::cout;
using std::endl;
class MyMath{
public:
vector<int> GetRandomNumWithWeight(vector<int> weight,int number){
int size = weight.size();
vector<int> res;
int accumulateValue = accumulate(weight.begin(),weight.end(),0);
srand(time(0));// srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数
for(int i = 0;i < number; i++)
{
int tempSum = 0;
int randomNnm = 0;
randomNnm = rand() % accumulateValue;
//0 ~ weight[0]为1,weight[0]+1 ~ weight[1]为2,依次类推
for(int j = 0;j < size;j++)
{
tempSum += weight[j];
cout << randomNnm << endl;
if(randomNnm <= tempSum)
{
res.push_back(j+1);
break;
}
}
}
return res;
}
};
int main()
{
vector<int> weight = {1000, 2000, 3000, 1000, 1000, 500, 500, 500, 500 };//数字1-9的权重(这里的数字范围与权重都可以自定义)
MyMath myMath;
vector<int> result =
myMath.GetRandomNumWithWeight(weight,5);
for(auto const &num:result)
{
cout << num << ' ';
}
cout << endl;
return 0;
}
最后
以上就是耍酷皮卡丘为你收集整理的带权重的随机数算法的实现(C++)的全部内容,希望文章能够帮你解决带权重的随机数算法的实现(C++)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复