homer512

random sets

Jun 12th, 2013
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <vector>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <algorithm>
  5. #include <iostream>
  6.  
  7. /*
  8.  * Generates 11 sets of 6 random numbers [0..50) without copies
  9.  */
  10. int main()
  11. {
  12.   // seed random number generator
  13.   std::srand(std::time(NULL));
  14.  
  15.   std::vector<int> src;
  16.   std::vector< std::vector<int> > ret;
  17.   for (int j = 1; j <= 49; ++j)
  18.     src.push_back(j);
  19.   for (size_t i = 0; i < 11; ++i) {
  20.  
  21.     // insert new vector in back
  22.     ret.push_back(std::vector<int>());
  23.     // work with reference to new vector, avoids later copy
  24.     std::vector<int>& out = ret.back();
  25.  
  26.     // remaining numbers to pick from
  27.     size_t range = src.size();
  28.     for (size_t j = 0; j < 6; ++j) {
  29.       // pick a value
  30.       size_t index = std::rand() % range;
  31.       out.push_back(src[index]);
  32.  
  33.       /* take the picked number out of range by swapping it with the last
  34.        * value, then shrinking range
  35.        */
  36.       std::swap(src[index], src[range - 1]);
  37.       range -= 1;
  38.     }
  39.     std::sort(out.begin(), out.end());
  40.   }
  41.  
  42.   for (size_t i = 0; i < ret.size(); ++i) {
  43.     for (size_t j = 0; j < ret[i].size(); ++j) {
  44.       std::cout << ret[i][j] << " ";
  45.     }
  46.     std::cout << std::endl << std::endl;
  47.   }
  48.  
  49.   return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment