[M-10]
Write a function that checks that each element N of an array is matched by
at least one other element with the value -N. There may be several elements
with value -N, even if there is just one N. And (also) if there are several
values N, they may be matched by just one value -N. If there is one zero in
the array, it must be matched by at least one other zero.
Return the number of unmatched values. For example:
0 1 -6 3 6 -1 8 7 -9 9 0 -7 -8 8 2 2 6 4 5 -6 5 elements are missing a match.
Here is a testing framework:
#include <stdio.h>
#include <stdlib.h>
/* Puzzle D47 -- check that an array has at least one
| element -N for each element N
|
| Return the count of the number of elements missing a match,
| zero or more. If the value zero is in the array, it must
| be matched with a second zero.
|
| Note that an array might have more than one -N for a particular N.
*/
int posNegMatch( int size, int arr[] )
{
. . . .
}
void printArray( int size, int arr[] )
{
const int N = 10;
int j;
for ( j=0; j<size; j++ )
{
if ( j%N == N-1 )
printf("%4d\n", arr[j] );
else
printf("%4d ", arr[j] );
}
}
int main()
{
int x[] = { 0, 1, -6, 3, 6, -1, 8, 7, -9, 9,
0, -7, -8, 8, 2, 2, 6, 4, 5, -6 };
int SIZE = sizeof(x)/sizeof(int);
int missing, j ;
printArray( SIZE, x );
printf("\n\n");
missing = posNegMatch( SIZE, x );
if ( missing == 0 )
printf("No elements are missing a match\n") ;
else
{
printf("%d elements are missing a match.\n", missing);
}
printf("\n\n");
return 0;
}