Home > Blockchain >  Handling negative numbers in array
Handling negative numbers in array

Time:11-26

By looping, I am trying to determine unique and duplicate elements in a given array and display their corresponding frequency. My code is as following:

    #include <stdio.h>
#define Frequency_size 10000
#define N 20
void unique_numbers(int array[], int n){
   int i,j;
   int count = 0;
   printf("List of unique numbers: ");
   for(i = 0; i < n; i  ){
      for(j = 0; j < n; j  ){
         if(array[i] == array[j] && i != j)
         break;
      }
      
      if(j == n ){
         printf("%d ",array[i]);
           count;
      }
   }
   printf("\n");
   printf("Element count in List of Unique Numbers = %d", count);
}


void non_unique_numbers(int arr[], int size)
{
    int i;
    int freq;
    int totdup = 0;

    int frequency[Frequency_size] = { 0 };
printf("List of Duplicated Numbers: \n");

    for (i = 0; i < size; i  )
          frequency[arr[i]];

    for (i = 0; i < Frequency_size ; i  ) {
        freq = frequency[i];
        if (freq <= 1)
            continue;

        printf("Number: %d  , Frequency: %d\n", i, freq);

        if (freq >= 2)
              totdup;
    }

    printf("Element Count in List of Duplicated Numbers = %d",totdup);
    
}


int main(){
    int array[]={41, 47, 23, -62, -52, 15, 41, -88, 90, -62, -40, 37, 34, 88, 26, -54, 53, 15, 41, 46};
    unique_numbers(array, N);
    printf("\n\n\n\n");
    non_unique_numbers(array, N);
}

When I run this my output is:

List of unique numbers: 47 23 -52 -88 90 -40 37 34 88 26 -54 53 46 
Element count in List of Unique Numbers = 13



List of Duplicated Numbers:
Number: 15  , Frequency: 2
Number: 41  , Frequency: 3
Element Count in List of Duplicated Numbers = 2

But in my array, I also have -62 duplicate 2 times. I also want to display that but I could not manage to handle negative numbers.

Desired output is:

List of Duplicated Numbers:
Number: 15  , Frequency: 2
Number: 41  , Frequency: 3
Number: -62  , Frequency: 2
Element Count in List of Duplicated Numbers = 3

It is because of the for loop of course but I could not manage to modify it. What can I do? I only want to use for loops by the way.

CodePudding user response:

Assuming that Frequency_size relates to the maximum absolute value of any number that can be stored in the array, you could try this:

int frequency_array[2*Frequency_size   1] = { 0 };
int *frequency = &frequency_array[Frequency_size];

// Now you can access frequency[x] from -Frequency_size .. 0 ..  Frequency_Size

printf("List of Duplicated Numbers: \n");

for (i = 0; i < size; i  )
{
  if (arr[i] >= -Frequency_size && arr[i] <= Frequency_size)
  {
      frequency[arr[i]];
  }
}

for (i = -Frequency_size; i <= Frequency_size ; i  ) 
{
  // .. Do the printing stuff here
}
  •  Tags:  
  • c
  • Related