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

• Difficulty Level : Medium
• Last Updated : 09 Apr, 2021

Consider a game where a player can score 3 or 5 or 10 points in a move. Given a total score n, find number of ways to reach the given score.
Examples:

```Input: n = 20
Output: 4
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
There are following 2 ways to reach 13
(3, 5, 5)
(3, 10)```

Become a success story instead of just reading about them. Prepare for coding interviews at Amazon and other top product-based companies with our Amazon Test Series. Includes topic-wise practice questions on all important DSA topics along with 10 practice contests of 2 hours each. Designed by industry experts that will surely help you practice and sharpen your programming skills. Wait no more, start your preparation today!

This problem is a variation of coin change problem and can be solved in O(n) time and O(n) auxiliary space.
The idea is to create a table of size n+1 to store counts of all scores from 0 to n. For every possible move (3, 5 and 10), increment values in table.

## 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 ``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 = 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 ` `// 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``    ``memset``(table, 0, ``sizeof``(table));` `    ``// Base case (If given value is 0)``    ``table = 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 = 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

 ``

## Javascript

 ``

Output:

```Count for 20 is 4
Count for 13 is 2 ```

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.