Skip to content
Related Articles
Open in App
Not now

Related Articles

Count number of ways to reach a given score in a game

Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 26 Sep, 2022
Improve Article
Save Article

Consider a game where players can score 3, 5, or 10 points in a move. Given a total score of N, The task is to find the number of ways to reach the given score.

Examples: 

Input: n = 20
Output: 4
Explanation: There are following 4 ways to reach 20: (10, 10), (5, 5, 10), (5, 5, 5, 5), (3, 3, 3, 3, 3, 5)

Input: n = 13
Output: 2
Explanation: There are following 2 ways to reach 13: (3, 5, 5), (3, 10)

Recommended Practice

The Given problem is a variation of coin change problem.

Finding the Number of Ways By Using the Bottom Up Dynamic Programming:

Using the Bottom up Dynamic Programming Approach to find the Number of Ways to reach the Given score.

Follow the below steps to Implement the idea:

  • Create an array table[] of size N+1 to store counts of all scores from 0 to N.
  • For every possible move (3, 5, and 10), increment the number of ways to reach the current score x i.e. table[x] with ways in which those scores can be reached from where x is reachable i.e. (x – 3), (x – 5), (x – 10). 
  • Return table[N] .

Below is the Implementation of the above approach:

C++




// A C++ program to count number of
// possible ways to a given score
// can be reached in a game where a
// move can earn 3 or 5 or 10
#include <iostream>
using namespace std;
 
// Returns number of ways
// to reach score n
int count(int n)
{
    // table[i] will store count
    // of solutions for value i.
    int table[n + 1], i;
 
    // Initialize all table
    // values as 0
    for (int j = 0; j < n + 1; j++)
        table[j] = 0;
 
    // Base case (If given value is 0)
    table[0] = 1;
 
    // One by one consider given 3 moves
    // and update the table[] values after
    // the index greater than or equal to
    // the value of the picked move
    for (i = 3; i <= n; i++)
        table[i] += table[i - 3];
 
    for (i = 5; i <= n; i++)
        table[i] += table[i - 5];
 
    for (i = 10; i <= n; i++)
        table[i] += table[i - 10];
 
    return table[n];
}
 
// Driver Code
int main(void)
{
    int n = 20;
    cout << "Count for " << n << " is " << count(n) << endl;
 
    n = 13;
    cout << "Count for " << n << " is " << count(n) << endl;
    return 0;
}
 
// This code is contributed
// by Shivi_Aggarwal

C




// A C program to count number of possible ways to a given
// score can be reached in a game where a move can earn 3 or
// 5 or 10
#include <stdio.h>
 
// Returns number of ways to reach score n
int count(int n)
{
    // table[i] will store count of solutions for
    // value i.
    int table[n + 1], i;
 
    // Initialize all table values as 0
    for (int i = 0; i < n + 1; i++) {
        table[i] = 0;
    }
 
    // Base case (If given value is 0)
    table[0] = 1;
 
    // One by one consider given 3 moves and update the
    // table[] values after the index greater than or equal
    // to the value of the picked move
    for (i = 3; i <= n; i++)
        table[i] += table[i - 3];
    for (i = 5; i <= n; i++)
        table[i] += table[i - 5];
    for (i = 10; i <= n; i++)
        table[i] += table[i - 10];
 
    return table[n];
}
 
// Driver program
int main(void)
{
    int n = 20;
    printf("Count for %d is %d\n", n, count(n));
 
    n = 13;
    printf("Count for %d is %d", n, count(n));
    return 0;
}

Java




// Java program to count number of
// possible ways to a given score
// can be reached in a game where
// a move can earn 3 or 5 or 10
import java.util.Arrays;
 
class GFG {
    // Returns number of ways to reach score n
    static int count(int n)
    {
        // table[i] will store count of solutions for
        // value i.
        int table[] = new int[n + 1], i;
 
        // Initialize all table values as 0
        Arrays.fill(table, 0);
 
        // Base case (If given value is 0)
        table[0] = 1;
 
        // One by one consider given 3
        // moves and update the table[]
        // values after the index greater
        // than or equal to the value of
        // the picked move
        for (i = 3; i <= n; i++)
            table[i] += table[i - 3];
        for (i = 5; i <= n; i++)
            table[i] += table[i - 5];
        for (i = 10; i <= n; i++)
            table[i] += table[i - 10];
 
        return table[n];
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 20;
        System.out.println("Count for " + n + " is "
                           + count(n));
 
        n = 13;
        System.out.println("Count for " + n + " is "
                           + count(n));
    }
}
 
// This code is contributed by Anant Agarwal.

Python3




# Python program to count number of possible ways to a given
# score can be reached in a game where a move can earn 3 or
# 5 or 10.
 
# Returns number of ways to reach score n.
 
 
def count(n):
 
    # table[i] will store count of solutions for value i.
    # Initialize all table values as 0.
    table = [0 for i in range(n+1)]
 
    # Base case (If given value is 0)
    table[0] = 1
 
    # One by one consider given 3 moves and update the
    # table[] values after the index greater than or equal
    # to the value of the picked move.
    for i in range(3, n+1):
        table[i] += table[i-3]
    for i in range(5, n+1):
        table[i] += table[i-5]
    for i in range(10, n+1):
        table[i] += table[i-10]
 
    return table[n]
 
 
# Driver Program
n = 20
print('Count for', n, 'is', count(n))
 
n = 13
print('Count for', n, 'is', count(n))
 
# This code is contributed by Soumen Ghosh

C#




// C# program to count number of
// possible ways to a given score
// can be reached in a game where
// a move can earn 3 or 5 or 10
using System;
 
class GFG {
 
    // Returns number of ways to reach
    // score n
    static int count(int n)
    {
 
        // table[i] will store count
        // of solutions for value i.
        int[] table = new int[n + 1];
 
        // Initialize all table values
        // as 0
        for (int j = 0; j < n + 1; j++)
            table[j] = 0;
 
        // Base case (If given value is 0)
        table[0] = 1;
 
        // One by one consider given 3
        // moves and update the table[]
        // values after the index greater
        // than or equal to the value of
        // the picked move
        for (int i = 3; i <= n; i++)
            table[i] += table[i - 3];
        for (int i = 5; i <= n; i++)
            table[i] += table[i - 5];
        for (int i = 10; i <= n; i++)
            table[i] += table[i - 10];
 
        return table[n];
    }
 
    // Driver code
    public static void Main()
    {
        int n = 20;
        Console.WriteLine("Count for " + n + " is "
                          + count(n));
 
        n = 13;
        Console.Write("Count for " + n + " is " + count(n));
    }
}
 
// This code is contributed by nitin mittal.

PHP




<?php
// PHP program to count number of
// possible ways to a given score
// can be reached in a game where
// a move can earn 3 or 5 or 10
// Returns number of ways to reach
// score n
function counts($n)
{
    // table[i] will store count
    // of solutions for value i.
 
    // Initialize all table
    // values as 0
    for($j = 0; $j < $n + 1; $j++)
            $table[$j] = 0;
 
    // Base case (If given value is 0)
    $table[0] = 1;
 
    // One by one consider given 3 moves
    // and update the table[] values after
    // the index greater than or equal to
    // the value of the picked move
    for ($i = 3; $i <= $n; $i++)
    $table[$i] += $table[$i - 3];
     
    for ($i = 5; $i <= $n; $i++)
    $table[$i] += $table[$i - 5];
     
    for ($i = 10; $i <= $n; $i++)
    $table[$i] += $table[$i - 10];
 
    return $table[$n];
}
 
// Driver Code
$n = 20;
echo "Count for ";
echo($n);
echo (" is ");
echo counts($n);
 
$n = 13;
echo ("\n") ;
echo "Count for ";
echo($n);
echo (" is " );
echo counts($n);
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript




<script>
 
// A JavaScript program to count number of
// possible ways to a given score
// can be reached in a game where a
// move can earn 3 or 5 or 10
 
// Returns number of ways
// to reach score n
function count(n)
{
    // table[i] will store count
    // of solutions for value i.
    let table = new Array(n + 1), i;
 
    // Initialize all table
    // values as 0
    for(let j = 0; j < n + 1; j++)
            table[j] = 0;
 
    // Base case (If given value is 0)
    table[0] = 1;
 
    // One by one consider given 3 moves
    // and update the table[] values after
    // the index greater than or equal to
    // the value of the picked move
    for (i = 3; i <= n; i++)
    table[i] += table[i - 3];
     
    for (i = 5; i <= n; i++)
    table[i] += table[i - 5];
     
    for (i = 10; i <= n; i++)
    table[i] += table[i - 10];
 
    return table[n];
}
 
// Driver Code
 
    let n = 20;
    document.write("Count for " + n
        + " is " + count(n) + "<br>");
 
    n = 13;
    document.write("Count for "+ n + " is "
        + count(n) + "<br>");
 
 
 
// This code is contributed by Surbhi Tyagi.
 
</script>

Output

Count for 20 is 4
Count for 13 is 2

Time Complexity: O(N), Where N is the score to be obtained.
Auxiliary Space: O(N), Where N is the score to be obtained.

Exercise: How to count score when (10, 5, 5), (5, 5, 10) and (5, 10, 5) are considered as different sequences of moves. Similarly, (5, 3, 3), (3, 5, 3) and (3, 3, 5) are considered different.
This article is contributed by Rajeev Arora. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!