Challenge: Coinage

Subdomeniu: Combinatorics (combinatorics)

Scor cont: 40.0 / 40

Submission status: Accepted

Submission score: 1.0

Submission ID: 464728902

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/coinage/problem

Cerinta

The Indian bank issues coins in 4 denominations, ₹1, ₹2, ₹5 and ₹10. 

Given a limited supply of each of the above denominations, in how many ways can you sum them up to a total of ₹N?

**Input Format**  
The first line contains an integer T (number of testcases). 
Each testcase contains 2 lines. The first line contains integer N (sum to be achieved)  
A, B, C and D in the next line, each representing the number of ₹1, ₹2, ₹5 and ₹10 coins respectively. 

**Output Format**  
Output the number of ways in which we can achieve the sum N.   

**Constraints**  
1 <= T <= 150  
1 <= N <= 1000  
1 <= A <= 10000  
1 <= B,C,D <= 1000  

**Sample Input**  

    2
    15
    2 3 1 1
    12
    2 2 1 1

**Sample Output**

    2
    2

**Explanation**  
In the first case we need to find the different ways to total to 15. 
We can use one ₹10 coin and one ₹5 coin  or one ₹10 coin two ₹2 coin and one ₹1 coin. Proceed similarly for the second case.

Cod sursa

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int t, n, a, b, c, d, i, j, k, count;
    scanf("%d", &t);
    do {
        scanf("%d", &n);
        scanf("%d %d %d %d", &a, &b, &c, &d);
        count = 0;
        for (i = 0; i <= d; ++i) {
            if (10*i >= n) {
                if (10*i == n) {
                    ++count;
                }
                break;
            }
            for (j = 0; j <= c; ++j) {
                if (10*i+5*j >= n) {
                    if (10*i+5*j == n) {
                        ++count;
                    }
                    break;
                }
                for (k = 0; k <= b; ++k) {
                    if (10*i+5*j+2*k >= n) {
                        if (10*i+5*j+2*k == n) {
                            ++count;
                        }
                        break;
                    } else if (n - (10*i+5*j+2*k) <= a) {
                        ++count;
                    }
                }
            }
        }
        printf("%d\n", count);
    } while (--t > 0);

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    return 0;
}
HackerRank Combinatorics – Coinage