fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. enum class Op
  5. {
  6. ADD,
  7. SUB
  8. };
  9.  
  10. int evaluate(std::vector<int> numbers, std::vector<Op> operations, std::string & formula)
  11. {
  12. formula = std::to_string(numbers[0]);
  13. int total = numbers[0];
  14. for(int i = 0 ; i < operations.size() ; ++i)
  15. {
  16. if(operations[i] == Op::ADD)
  17. {
  18. formula += "+" + std::to_string(numbers[i+1]);
  19. total += numbers[i+1];
  20. }
  21. else
  22. {
  23. formula += "-" + std::to_string(numbers[i+1]);
  24. total -= numbers[i+1];
  25. }
  26. }
  27.  
  28. return total;
  29. }
  30.  
  31. void generate(int level, std::vector<int> numbers, std::vector<Op> operations)
  32. {
  33. if(level == 10)
  34. {
  35. std::string formula;
  36. if(evaluate(numbers, operations, formula) == 100)
  37. {
  38. std::cout << formula << " = 100" << std::endl;
  39. }
  40.  
  41. return;
  42. }
  43.  
  44. auto numbers_next = numbers;
  45. numbers_next.push_back(level);
  46.  
  47. auto operations_add = operations;
  48. operations_add.push_back(Op::ADD);
  49. generate(level+1, numbers_next, operations_add);
  50.  
  51. auto operations_sub = operations;
  52. operations_sub.push_back(Op::SUB);
  53. generate(level+1, numbers_next, operations_sub);
  54.  
  55. auto numbers_num = numbers;
  56. numbers_num.back() = numbers_num.back() * 10 + level;
  57. generate(level+1, numbers_num, operations);
  58. }
  59.  
  60. int main()
  61. {
  62. generate(2, {1}, {});
  63. }
  64.  
Success #stdin #stdout 0.02s 3236KB
stdin
Standard input is empty
stdout
1+2+3-4+5+6+78+9 = 100
1+2+34-5+67-8+9 = 100
1+23-4+5+6+78-9 = 100
1+23-4+56+7+8+9 = 100
12+3+4+5-6-7+89 = 100
12+3-4+5+67+8+9 = 100
12-3-4+5-6+7+89 = 100
123+4-5+67-89 = 100
123+45-67+8-9 = 100
123-4-5-6-7+8-9 = 100
123-45-67+89 = 100