Missing number in array in C programming

Given an array C of size N-1 and given that there are numbers from 1 to N with one element missing, the missing number is to be found.

Input: The first line of input contains an integer T denoting the number of test cases. For each test case first line contains N(size of array). The subsequent line contains N-1 array elements.

Output: Print the missing number in array.

This problem is to find the missing number in a series of n integers. but, while using the below code I could not get the output as expected.

#include <stdio.h>

int main() 
{
    //code
    int T,run,i;
    scanf("%d", &T);
    long N,res,C,en;
    long arra[1];
    for (run = 0;run <T; run++ )
    { 
        long arra[T];
        scanf("%ld", &N);
        res =0;
        for (i = 0; i <N-1; i++)
        {
            scanf("%ld",&C);
            res = res + C;
        }
        en = ((N*(N+1))/2)- res; // subtracting the overall sum of array elements from N integers 
        arra[run]=en; //saving it to array
    }
    for(run = 0; run < T; run++)
    {
        printf("%ld ",arra[run]);
    }
    return 0;
}

I expected the below input and output:

Input:
2
5
1 2 3 5
10
1 2 3 4 5 6 7 8 10

Output:
4
9

but actual output is

1 -8719623343620674816

Upvotes: 0

Views: 2723

Answers (3)

Nusret Onur Ayduman
Nusret Onur Ayduman

Reputation: 21

here is a self explainable simple example

  public static void Main()
{
    int[] ary = { 5, 11, 3, 7, 13, 15 }; //{ 3, 5, 7, 11, 13, 15 };
    Array.Sort(ary);
    int freq=0;
    int minval = ary[0];
    int[] correct = new int[ary.Length+1];

    int[,] freqs = new int[(ary.Length), 2];
    freqs[0, 0] = 1;
    freqs[0, 1] = ary[0];

    for (int i = 0; i < ary.Length-1; i++)
    {
        int dif = ary[i + 1] - ary[i];
        int res = Search(freqs, dif);
        if (res < 0)
        {
            freqs[i, 0] = 1;
            freqs[i, 1] = dif;
        }
        else
        {
            freqs[res, 0] = freqs[res, 0] + 1;

        }            
    };
    for (int i = 0; i < freqs.GetLength(0); i++)
    {
      
        freq =freqs[i, 0] >freq? freqs[i, 1] : freq;

    }
    for (int i = 0; i < correct.Length;i++)
    {
        correct[i] = i == 0 ? minval :( correct[i - 1] + freq);
    }

    foreach (int i in correct.Except(ary))
    {
        Console.WriteLine("eksik değer="+i);
    }
    Console.ReadLine();



    int Search(int[,] matrix, int val)
    {
        int hit = -99;
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            if (val == matrix[i, 1])
                return i;
        }
        return hit;
    }
}

Upvotes: 0

osama khan
osama khan

Reputation: 39

correct code

declare the arra before the for loop else for every iteration the arra will be re declared deleting the previous values in it

#include <stdio.h>

int main() 
{
    //code
    int T,run,i;
    scanf("%d", &T);
    long N,res,C,en;
    long arra[T];
    for (run = 0;run <T; run++ )
    { 
        scanf("%ld", &N);
        res =0;
        for (i = 0; i <N-1; i++)
        {
            scanf("%ld",&C);
            res = res + C;
        }
        en = ((N*(N+1))/2)- res; // subtracting the overall sum of array elements from N integers 
        arra[run]=en; //saving it to array
    }
    for(run = 0; run < T; run++)
    {
        printf("%ld ",arra[run]);
    }
    return 0;
}

Upvotes: 0

Barmar
Barmar

Reputation: 781096

You re-declared the variable arra inside the for loop. So when you assign to arra[run], you're assigning to the inner array, not the one in the main() function. So you get garbage when you try to print the contents of the array at the end.

You also declared the first array with only one element, rather than T elements.

Get rid of the second declaration, and change the first one from

long arra[1];

to

long arra[T];

Upvotes: 2

Related Questions