使用蓄水池的算法
int qiujie_suiji(vector<char> nums,char c)
{
//每当a出现一次的时候就进行随机数操作过程
int count = 0;
int len = nums.size();
int flag = 0;
int xushuichi = 0;
for (int i = 0; i < len; ++i)
{
if (flag == 0)//这个a没出现
{
if (nums[i] == c)
xushuichi = i;
flag = 1;
}
else
{
if (nums[i] == c)
{
++count;
int rand_n = rand() % (count + 1);
if (rand_n < 1)
xushuichi = i;
}
}
}
return xushuichi;
}
int main()
{
vector<char> nums = { 'a','b','a','c','a' };
char c = 'a';
vector<int> resulta(5,0);
for (int i = 0; i < 100000; ++i)
{
auto result=qiujie_suiji(nums, c);
//cout << result << endl;
++resulta[result];
}
cout << resulta[0] << endl;
cout << resulta[2] << endl;
cout << resulta[4] << endl;
}