[H-25]
Write a function that checks that both x and y are in an integer array, but
not necessarily one right after the other, and not necessarily
in order. Return the number of elements between x and y if they are both there,
and -1 if they are not both there. If there are several elements x or y, return
the number of elements between the x and y that are closest together.
If both x and y are the same value, then look for two instances of that value in the array. Here is a testing framework:
int distBetweenElts( int size, int arr[], int x, int y )
{
. . . .
}
void printArray( int size, int arr[] );
/* Get user input, x and y. Return 0 if
| the user wants to quit, otherwise return 1
*/
int userInput( int *x, int *y )
{
char inputX[32], inputY[32];
printf("x y: ");
scanf("%s", inputX );
if ( !isdigit((int)inputX[0]) && inputX[0] != '-' )
return 0;
else
{
scanf("%s", inputY );
*x = atoi( inputX );
*y = atoi( inputY );
return 1;
}
}
int main()
{
const int SIZE = 10;
int arr[] = { -5, -3, 0, 6, 4, 16, -3, 0, 7, 9 };
int min, x, y;
printArray( arr, SIZE );
while ( userInput( &x, &y ) )
{
min = distBetweenElts( SIZE, arr, x, y );
if ( min != -1 )
printf("minimum distance %d\n", min );
else
printf("Failed to find both elements.\n");
}
return 0;
}
This puzzle is much more difficult than the previous puzzles. Here is sample output of a testing program:
-5 -3 0 6 4 16 -3 0 7 9 x y: 0 6 minimum distance 0 x y: 0 4 minimum distance 1 x y: 4 0 minimum distance 1 x y: 7 8 Failed to find both elements. x y: 8 8 Failed to find both elements. x y: 7 7 Failed to find both elements. x y: 0 7 minimum distance 0 x y: -3 -3 minimum distance 4 x y: -5 9 minimum distance 8 x y: q