Advertisement
iskhakovt

Четыре указателя SHORT

Oct 26th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define diff(i, j)   ( (*M[i]) - (*M[j]) > 0 ? (*M[i]) - (*M[j]) : (*M[j]) - (*M[i]) )
  4. #define f(name)      ( name(0, name(1, name(2, 3))) )
  5. #define min(i, j)    ( (*M[i]) < (*M[j]) ? i : j )
  6. #define max(i, j)    ( (*M[i]) > (*M[j]) ? i : j )
  7. #define SET_M(x)     unsigned long **x = (unsigned long **) malloc(4 * sizeof(unsigned long *))
  8. #define MAKE         { scanf("%u", &n); SET INPUT qsort(M[t], n, sizeof(unsigned long), compare); }
  9. #define SET          { M[i] = (unsigned long *) malloc(n * sizeof(unsigned long)); E[i] = &M[i][n]; }
  10. #define INPUT        for (t = 0; t < n; ++t) scanf("%lu", &M[i][t]);
  11. #define UPDATE       if (curr < res) res = curr; ++M[0]; ++M[1]; ++M[2]; ++M[3];
  12. #define END_WORK     printf("%lu %lu %lu %lu", *M[0], *M[1], *M[2], *M[3]); return 0; }
  13. int compare(const void *a, const void *b) { return *(unsigned long *) a - *(unsigned long *) b;
  14. int main() { unsigned int n, t, i = 0; SET_M(M); SET_M(E); MAKE MAKE MAKE MAKE
  15.     unsigned long curr, res = diff(f(max), f(min));
  16.     while (res) { curr = diff(f(min), f(max)); UPDATE if (M[f(min)] == E[f(min)]) END_WORK } END_WORK }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement