fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <vector>
  5.  
  6. bool increase(const std::vector<std::string>& v, std::vector<std::size_t>& it)
  7. {
  8. for (std::size_t i = 0, size = it.size(); i != size; ++i) {
  9. const std::size_t index = size - 1 - i;
  10. ++it[index];
  11. if (it[index] == v[index].size()) {
  12. it[index] = 0;
  13. } else {
  14. return true;
  15. }
  16. }
  17. return false;
  18. }
  19.  
  20. void do_job(const std::vector<std::string>& v, std::vector<std::size_t>& it)
  21. {
  22. for (std::size_t i = 0, size = v.size(); i != size; ++i) {
  23. std::cout << v[i][it[i]];
  24. }
  25. std::cout << std::endl;
  26. }
  27.  
  28. void iterate(const std::vector<std::string>& v)
  29. {
  30. std::vector<std::size_t> it(v.size(), 0);
  31.  
  32. do {
  33. do_job(v, it);
  34. } while (increase(v, it));
  35. }
  36.  
  37. int main()
  38. {
  39. const std::map<int, std::string> m = {
  40. {0, "*"}, {1, "#" }, {2, "ABC"},
  41. {3, "DEF"}, {4, "GHI"}, {5, "JKL"},
  42. {6, "MNO"}, {7, "PQR"}, {8, "STU"},
  43. {9, "VWXYZ"}
  44. };
  45. const std::vector<int> numbers = {0, 2, 3};
  46. std::vector<std::string> v;
  47. for (auto n : numbers) {
  48. v.push_back(m.at(n));
  49. }
  50. iterate(v);
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 3480KB
stdin
Standard input is empty
stdout
*AD
*AE
*AF
*BD
*BE
*BF
*CD
*CE
*CF