C program to find the five closest numbers to the given number 'n'

You are given a sorted list of N numbers and a number Num. Write a program to find the five numbers that are closest (numerically) to Num. A number x in the array is closest to Num if |Num-x| is the smallest among all such x possible.

Note: If the Num is present in given list, then it should be in the output.

Constraints:

        5 < N <20

        All numbers in list are between -10000 to 10000

        -10000 <Num< 10000

        There could be numbers that are repeated

Input:       

    N Num

    m1 m2 m3 .. mN

where mi's are N numbers in sorted order.

Output:

    p1 p2 p3 p4 p5

where pi's are closest numbers in increasing order of absolute difference from Num. If there are two numbers with same difference, print the larger one first.

There should be a space between each element but no space or newline at the end of the output sequence.


Implementation:

#include<stdio.h>
#define MAXSIZE 20

/*
  Write a function for printing 5 closest numbers
*/

int min(int x,int y)
{
  if(x>y)
    return x-y;
  else
    return y-x;
}

int findmin(int *a,int num,int n)
{
  int i,min_val=min(num,*(a+0)),min_index=0;
  for(i=1;i<n;i++)
  {
    if(min(num,a[i])<min_val)
    {
      min_val = min(num,a[i]);
      min_index = i;
    }
  }
  return min_index;
}


void printclosest(int arr[], int num, int n){
 int index = findmin(arr,num,n);
   int print=4;
   int l=index-1;
   int r=index+1;
   printf("%d ",arr[index]);
   while(print && l>=0 && r<n)
    {
      if(num-arr[l]<arr[r]-num)
      {
        printf("%d",arr[l--]);
      }
      else if(num-arr[l]>arr[r]-num)
      {
        printf("%d",arr[r++]);
      }
      else
      {
        if(arr[l]>arr[r])
          printf("%d",arr[l--]);
        else
          printf("%d",arr[r++]);
      }
      print--;
      if(print)
        printf(" ");
    }
   while(print && l>=0)
    {
      printf("%d",arr[l--]);
      print--;
     if(print)
       printf(" ");
    }
     
   while(print && r<n)
    {
       printf("%d ",arr[r++]);
    print--;
    if(print)
          printf(" ");
    }
}
int main()
{
  int arr[MAXSIZE];
  int i,n,num;
  scanf("%d %d",&n,&num);
  for (i = 0; i < n; ++i)
 {
   scanf("%d",&arr[i]);
 }
  printclosest(arr, num, n);
  return 0;
}