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.
Sample Input 0
1
Sample Output 0
Correct Answer Correct Answer Correct Answer
Hackerrank C programming Solutions
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, "Your output is:\n"); 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, "Your output is:\n"); 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, "Your output is:\n"); 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()) { printf("Correct Answer\n"); } else { printf("Wrong Answer\n"); } if (test_implementations_by_sending_five_elements()) { printf("Correct Answer\n"); } else { printf("Wrong Answer\n"); } if (test_implementations_by_sending_ten_elements()) { printf("Correct Answer\n"); } else { printf("Wrong Answer\n"); } } return 0; }
I hope this article help you , for more C programming Hackerrank Solution follow my website and this link..
Link update Soon: