Knuth's algorithm S: Difference between revisions

Line 237:
return 0;
}</lang>
{{out}}
 
Output:
 
<pre>
30052
Line 252 ⟶ 250:
30247
</pre>
 
Class-based version:
<lang cpp>#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
 
template <typename T>
class SOfN {
std::vector<T> sample;
int i;
const int n;
public:
SOfN(int _n) : i(0), n(_n) { }
std::vector<T> operator()(T item) {
i++;
if (i <= n) {
sample.push_back(item);
} else if (std::rand() % i < n) {
sample[std::rand() % n] = item;
}
return sample;
}
};
 
int main() {
std::srand(std::time(NULL));
int bin[10] = {0};
for (int trial = 0; trial < 100000; trial++) {
SOfN<int> s_of_n(3);
std::vector<int> sample;
for (int i = 0; i < 10; i++)
sample = s_of_n(i);
for (std::vector<int>::const_iterator i = sample.begin(); i != sample.end(); i++)
bin[*i]++;
}
for (int i = 0; i < 10; i++)
std::cout << bin[i] << std::endl;
return 0;
}</lang>
 
=={{header|CoffeeScript}}==
Anonymous user