fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <tuple>
  5. #include <algorithm>
  6.  
  7. typedef std::vector<std::uint64_t> DType;
  8. typedef std::vector<std::tuple<std::uint64_t, std::uint64_t, std::uint64_t, std::uint64_t> > RType;
  9.  
  10. RType MakeHoge(DType D, std::uint64_t Ans) {
  11.  
  12. RType R;
  13. std::sort(D.begin(), D.end());
  14. do {
  15.  
  16. if ((D[0] + D[1]) * (D[2] + D[3]) == Ans) {
  17. R.push_back({ D[0],D[1],D[2],D[3] });
  18. }
  19.  
  20.  
  21. } while (std::next_permutation(D.begin(), D.end()));
  22.  
  23. std::sort(R.begin(), R.end());
  24. R.erase(std::unique(R.begin(), R.end()), R.end());
  25.  
  26. return R;
  27. }
  28.  
  29. bool Show(const RType& R) {
  30. std::cout <<"Count:"<< R.size() << std::endl;
  31. for (auto& o : R) {
  32. std::cout << "(" << std::get<0>(o) << "+" << std::get<1>(o) << ")*(" << std::get<2>(o) << "+" << std::get<3>(o) << ")" << std::endl;
  33. }
  34. return 0;
  35. }
  36.  
  37. int main() {
  38.  
  39. DType D = { 1,2,3,4,5,6,7,8,9,10 };
  40. std::uint64_t A = 100;
  41.  
  42. auto R = MakeHoge(D, A);
  43.  
  44. Show(R);
  45.  
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0.01s 15240KB
stdin
Standard input is empty
stdout
Count:48
(1+9)*(2+8)
(1+9)*(3+7)
(1+9)*(4+6)
(1+9)*(6+4)
(1+9)*(7+3)
(1+9)*(8+2)
(2+8)*(1+9)
(2+8)*(3+7)
(2+8)*(4+6)
(2+8)*(6+4)
(2+8)*(7+3)
(2+8)*(9+1)
(3+7)*(1+9)
(3+7)*(2+8)
(3+7)*(4+6)
(3+7)*(6+4)
(3+7)*(8+2)
(3+7)*(9+1)
(4+6)*(1+9)
(4+6)*(2+8)
(4+6)*(3+7)
(4+6)*(7+3)
(4+6)*(8+2)
(4+6)*(9+1)
(6+4)*(1+9)
(6+4)*(2+8)
(6+4)*(3+7)
(6+4)*(7+3)
(6+4)*(8+2)
(6+4)*(9+1)
(7+3)*(1+9)
(7+3)*(2+8)
(7+3)*(4+6)
(7+3)*(6+4)
(7+3)*(8+2)
(7+3)*(9+1)
(8+2)*(1+9)
(8+2)*(3+7)
(8+2)*(4+6)
(8+2)*(6+4)
(8+2)*(7+3)
(8+2)*(9+1)
(9+1)*(2+8)
(9+1)*(3+7)
(9+1)*(4+6)
(9+1)*(6+4)
(9+1)*(7+3)
(9+1)*(8+2)