# Variadic functions in C HackerRank Solution

Hello Friends in this article i am gone to share Hackerrank C programming Solutions with you. | Variadic functions in C HackerRank Solution.

### Objective

Variadic functions are functions which take a variable number of arguments. In C programming, a variadic function will contribute to the flexibility of the program that you are developing.
The declaration of a variadic function starts with the declaration of at least one named variable, and uses an ellipsis as the last parameter, e.g.

`int printf(const char* format, ...);`

In this problem, you will implement three variadic functions named sum(), min() and max() to calculate sums, minima, maxima of a variable number of arguments. The first argument passed to the variadic function is the count of the number of arguments, which is followed by the arguments themselves.

### Input Format

• The first line of the input consists of an integer number_of_test_cases.
• Each test case tests the logic of your code by sending a test implementation of 3, 5 and 10 elements respectively.
• You can test your code against sample/custom input.
• The error log prints the parameters which are passed to the test implementation. It also prints the sum, minimum element and maximum element corresponding to your code.

### Constraints

1 <= Number_of_test_cases <= 50
1 <= element <= 1000000

### Output Format

“Correct Answer” is printed corresponding to each correct execution of a test implementation.”Wrong Answer” is printed otherwise.

`1`

### Sample Output 0

```Correct Answer

## Variadic functions in C HackerRank Solution

```#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MIN_ELEMENT 1
#define MAX_ELEMENT 1000000
int sum(int count, ...)
{
int sum = 0;
va_list values;
va_start(values, count);
for (int i = 0; i < count; i++)
{
sum += va_arg(values, int);
}

va_end(values);
return sum;

}

int min(int count, ...)
{
int min = MAX_ELEMENT, test;
va_list values;
va_start(values, count);
for (int i = 0; i < count; i++)
{
test = va_arg(values, int);
if (min > test)
{
min = test;
}
}

va_end(values);
return min;

}

int max(int count, ...)
{
int max = MIN_ELEMENT, test;
va_list values;
va_start(values, count);
for (int i = 0; i < count; i++)
{
test = va_arg(values, int);
if (max < test)
{
max = test;
}
}

va_end(values);
return max;
}

int test_implementations_by_sending_three_elements()
{
srand(time(NULL));

int elements[3];

elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;

fprintf(stderr, "Sending following three elements:\n");
for (int i = 0; i < 3; i++)
{
fprintf(stderr, "%d\n", elements[i]);
}

int elements_sum = sum(3, elements[0], elements[1], elements[2]);
int minimum_element = min(3, elements[0], elements[1], elements[2]);
int maximum_element = max(3, elements[0], elements[1], elements[2]);

fprintf(stderr, "Elements sum is %d\n", elements_sum);
fprintf(stderr, "Minimum element is %d\n", minimum_element);
fprintf(stderr, "Maximum element is %d\n\n", maximum_element);

int expected_elements_sum = 0;
for (int i = 0; i < 3; i++)
{
if (elements[i] < minimum_element)
{
return 0;
}

if (elements[i] > maximum_element)
{
return 0;
}

expected_elements_sum += elements[i];
}

return elements_sum == expected_elements_sum;
}

int test_implementations_by_sending_five_elements()
{
srand(time(NULL));

int elements[5];

elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[3] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[4] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;

fprintf(stderr, "Sending following five elements:\n");
for (int i = 0; i < 5; i++)
{
fprintf(stderr, "%d\n", elements[i]);
}

int elements_sum = sum(5, elements[0], elements[1], elements[2], elements[3], elements[4]);
int minimum_element = min(5, elements[0], elements[1], elements[2], elements[3], elements[4]);
int maximum_element = max(5, elements[0], elements[1], elements[2], elements[3], elements[4]);

fprintf(stderr, "Elements sum is %d\n", elements_sum);
fprintf(stderr, "Minimum element is %d\n", minimum_element);
fprintf(stderr, "Maximum element is %d\n\n", maximum_element);

int expected_elements_sum = 0;
for (int i = 0; i < 5; i++)
{
if (elements[i] < minimum_element)
{
return 0;
}

if (elements[i] > maximum_element)
{
return 0;
}

expected_elements_sum += elements[i];
}

return elements_sum == expected_elements_sum;
}

int test_implementations_by_sending_ten_elements()
{
srand(time(NULL));

int elements[10];

elements[0] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[1] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[2] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[3] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[4] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[5] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[6] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[7] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[8] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;
elements[9] = rand() % (MAX_ELEMENT - MIN_ELEMENT + 1) + MIN_ELEMENT;

fprintf(stderr, "Sending following ten elements:\n");
for (int i = 0; i < 10; i++)
{
fprintf(stderr, "%d\n", elements[i]);
}

int elements_sum = sum(10, elements[0], elements[1], elements[2], elements[3], elements[4],
elements[5], elements[6], elements[7], elements[8], elements[9]);
int minimum_element = min(10, elements[0], elements[1], elements[2], elements[3], elements[4],
elements[5], elements[6], elements[7], elements[8], elements[9]);
int maximum_element = max(10, elements[0], elements[1], elements[2], elements[3], elements[4],
elements[5], elements[6], elements[7], elements[8], elements[9]);

fprintf(stderr, "Elements sum is %d\n", elements_sum);
fprintf(stderr, "Minimum element is %d\n", minimum_element);
fprintf(stderr, "Maximum element is %d\n\n", maximum_element);

int expected_elements_sum = 0;
for (int i = 0; i < 10; i++)
{
if (elements[i] < minimum_element)
{
return 0;
}

if (elements[i] > maximum_element)
{
return 0;
}

expected_elements_sum += elements[i];
}

return elements_sum == expected_elements_sum;
}

int main()
{
int number_of_test_cases;
scanf("%d", &number_of_test_cases);

while (number_of_test_cases--)
{
if (test_implementations_by_sending_three_elements())
{
}
else
{
}

if (test_implementations_by_sending_five_elements())
{
}
else
{
}

if (test_implementations_by_sending_ten_elements())
{