# Find the missing number between 1 and 100

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

``````find3missing(int* array)
{
int newarray = {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={1,2,6};
int tmp={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 = {0};

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