fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int rearrange(int (&a)[4])
  5. {
  6. if (a[3] < a[2]) {
  7. std::swap(a[3], a[2]);
  8. } // a[2] <= a[3]
  9. if (a[1] < a[0]) {
  10. std::swap(a[1], a[0]);
  11. } // a[2] <= a[3] && a[0] <= a[1]
  12. if (a[0] < a[2]) {
  13. std::swap(a[0], a[2]);
  14. } // a[2] <= a[3] && a[2] <= a[0] <= a[1] -> a[2] is the min
  15. if (a[1] < a[3]) {
  16. std::swap(a[1], a[3]);
  17. } // a[2] <= a[3] <= a[1] && a[2] <= a[0] <= a[1] -> a[1] is the max
  18. if (a[3] < a[0]) {
  19. std::swap(a[3], a[0]);
  20. } // a[2] <= a[0] <= a[3] <= a[1]
  21. // as we know order, we might get rod of abs:
  22. // (a[1] - a[0]) + (a[1] - a[2]) + (a[3] - a[2]);
  23. return -a[0] + 2 * a[1] - 2 * a[2] + a[3];
  24. }
  25.  
  26. void test(int (&a)[4])
  27. {
  28. std::cout << "sum = " << rearrange(a) << std::endl;
  29. for (int e : a) {
  30. std::cout << e << " ";
  31. }
  32. std::cout << std::endl;
  33. }
  34.  
  35. int main() {
  36. int a[] = {1, 2, 4, 8};
  37. int b[] = {3, -1, 5, 5};
  38.  
  39. test(a);
  40. test(b);
  41. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
sum = 16
2 8 1 4 
sum = 14
3 5 -1 5