Find the missing number between 1 and 100

advertisements

This question has been asked here on SO before with below code

find3missing(int* array)
{
    int newarray[100] = {0};
    For i = 0 to 99
        ++newarray[array[i]] ;
    For i = 0 to 99
        If newarray[i] != 1
            Cout << “the missing number is ” << i+1 << endl ;
}

But when I checked this code, it doesn't seem to work. Suppose I have an array of {1,2,6}. The output should be 3,4,5 but with the code above I get 1,4,5,6 instead. Below is my implementation of pseudo code with array size 6.

main()
{
    int a[6]={1,2,6};
    int tmp[6]={0},i;
    for(i=0;i<6;i++)
    {
        ++tmp[a[i]];
    }
    for(i=0;i<6;i++)
    {
        if(tmp[i]!=1)
        {
            printf("%d",i+1);
        }
    }
}

Is this the right code?


This ++newarray[array[i]] should be ++newarray[array[i] - 1]. This because you are interested in a sequence of 1-100 numbers, so no 0, but C arrays are 0 based. If you then look at the cout: the missing number is ” << i+1 here you "unshift" the number by adding 1.

There is another problem: you should pass the number of elements of the array, something like:

find3missing(int* array, int length) {
  int newarray[100] = {0};

  for (int i = 0; i < length; i++) {
      ++newarray[array[i] - 1] ;
  }