fork(4) download
  1. #include <stdio.h>
  2. #include <float.h>
  3.  
  4. int max(int a, int b)
  5. {
  6. return a>b?a:b;
  7. }
  8.  
  9. int min(int a, int b)
  10. {
  11. return a<b?a:b;
  12. }
  13.  
  14. float findMed(int A[], int B[], int n)
  15. {
  16. if( n <= 0 ) return FLT_MIN;
  17.  
  18. if( n == 1)
  19. return (A[0] + B[0]) / 2.0;
  20. if( n == 2 )
  21. return (max(A[0],B[0]) + min(A[1],B[1])) / 2.0;
  22. if( A[n-1] < B[0] )
  23. return (A[n-1] + B[0]) / 2.0;
  24. if( B[n-1] < A[0] )
  25. return (A[0] + B[n-1]) / 2.0;
  26.  
  27. int medA = A[(n-1)/2];
  28. int medB = B[(n-1)/2];
  29.  
  30. if(medA == medB)
  31. return medA;
  32. if( medA < medB )
  33. return findMed(A+(n-1)/2, B, n/2 + 1);
  34. return findMed(A, B+(n-1)/2, n/2 + 1);
  35. }
  36.  
  37. int main()
  38. {
  39. int A[]={2, 4, 6, 10}, B[]={1, 3, 9, 12}, size;
  40.  
  41. size = sizeof(A)/ sizeof(*A);
  42.  
  43. printf("%f", findMed(A,B,size));
  44.  
  45. return 0;
  46. }
Success #stdin #stdout 0.02s 1676KB
stdin
Standard input is empty
stdout
5.000000