fork download
  1. #include <stdio.h>
  2.  
  3. long long average(long long a, long long b, long long c)
  4. {
  5. long long rem_sum = a % 3 + b % 3 + c % 3;
  6. long long x = a / 3 + b / 3 + c / 3 + rem_sum / 3;
  7. long long y = rem_sum % 3;
  8.  
  9. int coef1 = -(x > 0 && y < 0);
  10. int coef2 = +(x < 0 && y > 0);
  11.  
  12. return x + coef1 + coef2;
  13. }
  14.  
  15. int main(void)
  16. {
  17. long long min = -9223372036854775807 - 1;
  18. long long max = 9223372036854775807;
  19.  
  20. printf("%d", average(min, min, min) == min );
  21. printf("%d", average(max, max, max) == max );
  22. printf("%d", average(min, min+1, min+2) == min+1 );
  23. printf("%d", average(max, max-1, max-2) == max-1 );
  24. printf("%d", average(max, 1, 2) == max/3 + 1 );
  25. printf("%d", average(max, -1, -2) == max/3 - 1 );
  26. printf("%d", average(min, 1, 2) == -(max/3 - 1) );
  27. printf("%d", average(min, -1, -2) == -(max/3 + 1) );
  28. printf("%d", average(0, 0, 0) == 0 );
  29. printf("%d", average(2, 2, 2) == 2 );
  30. printf("\n");
  31.  
  32. printf("%d", average(9223372036854775800, 4611686018427387897, 3) == 4611686018427387900);
  33. printf("%d", average(9223372036854775800, -6, -2) == 3074457345618258597);
  34. printf("\n");
  35.  
  36. long long counter = 0;
  37. long long first = -32;
  38. long long last = 32;
  39. for (long long a = first; a <= last; ++a)
  40. for (long long b = first; b <= last; ++b)
  41. for (long long c = first; c <= last; ++c)
  42. {
  43. long long res = (a + b + c) / 3;
  44. if (average(a, b, c) != res)
  45. ++counter;
  46. }
  47. printf("Errors: %lld\n", counter);
  48. }
  49.  
Success #stdin #stdout 0s 4176KB
stdin
Standard input is empty
stdout
1111111111
11
Errors: 0