1 // WaterPool.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <stdlib.h>
6 #include <vector>
7 #include <iterator>
8 #include <iostream>
9 using namespace std;
10
11
12 int GetRand(int i)
13 {
14 return ((int)rand()/(int)RAND_MAX)*i + 1;
15 }
16
17 int _tmain(int argc, _TCHAR* argv[])
18 {//数据流为1~1000,池子大小100,等概率地从中任意选出100个数存入池子中
19 int index = 0;
20 int maxFlow = 1000;//连续的流,最大值已知
21 int poolSize = 100;
22 vector<int> pool;
23
24
25 for(;index < poolSize;index++)
26 pool.push_back(index+1);
27 //1.1~100依次取进来
28 for(index = poolSize;index < maxFlow;index++)
29 {
30 if(GetRand(index) <= poolSize)
31 pool[GetRand(poolSize) - 1] = index;
32 }
33 //2.100以后的 根据索引产生一个随机数,随机数在0~100之间就放入池子中,
34 //然后随机从池中替换掉一个。最终每个数进池的概率都为poolSize/maxFlow
35 vector<int>::iterator ite = pool.begin();
36 for(;ite != pool.end();ite++)
37 cout<<*ite<<" ";
38 cout<<endl;
39 system("pause");
40 return 0;
41 }