Skip to content
Related Articles

Related Articles

In how many ways the ball will come back to the first boy after N turns
  • Last Updated : 08 Mar, 2021

Four boys are playing a game with a ball. In each turn, the player (who has the ball currently) passes it to a different player randomly. Bob always starts the game. The task is to find in how many ways the ball will come back to Bob after N passes.
Examples: 
 

Input: N = 3 
Output:
Here are all the possible ways: 
Bob -> Boy1 -> Boy2 -> Bob 
Bob -> Boy1 -> Boy3 -> Bob 
Bob -> Boy2 -> Boy1 -> Bob 
Bob -> Boy2 -> Boy3 -> Bob 
Bob -> Boy3 -> Boy1 -> Bob 
Bob -> Boy3 -> Boy2 -> Bob
Input: N = 10 
Output: 14763 
 

 

Approach: Let the number of sequences that get back to Bob after N passes are P(N). The are two cases, either pass N – 2 is to Bob or it is not. Note that Bob can’t have the ball at (N – 1)th pass because then he won’t have the ball at the Nth pass.
 

  1. Case 1: If pass N – 2 is to Bob then the pass N – 1 can be to any of the other 3 boys. Thus, the number of such sequences is 3 * P(N – 2).
  2. Case 2: If pass N – 2 is not to Bob then pass N – 1 is to one of the 2 boys other than Bob and the one who got the ball in hand. So, substitute Bob for the receiver of pass N – 1, and get a unique N – 1 sequence. So, the number of such sequences are 2 * P(N – 1).

Hence the recurrence relation will be P(N) = 2 * P(N – 1) + 3 * P(N – 2) where P(0) = 1 and P(1) = 0.
After solving the recurrence relation, P(N) = (3N + 3 * (-1N)) / 4
Below is the implementation of the above approach: 
 



C++




// Function to return the number of
// sequences that get back to Bob
#include <bits/stdc++.h>
using namespace std;
 
int numSeq(int n)
{
    return (pow(3, n) + 3 * pow(-1, n)) / 4;
}
 
// Driver code
int main()
{
    int N = 10;
    printf("%d", numSeq(N));
    return 0;
}
 
// This code is contributed by Mohit kumar

Java




// Function to return the number of
// sequences that get back to Bob
import java.util.*;
 
class GFG
{
 
static int numSeq(int n)
{
    return (int) ((Math.pow(3, n) + 3 *
                    Math.pow(-1, n)) / 4);
}
 
// Driver code
public static void main(String[] args)
{
    int N = 10;
    System.out.printf("%d", numSeq(N));
}
}
 
// This code is contributed by Rajput-Ji

Python3




# Function to return the number of
# sequences that get back to Bob
def numSeq(n):
    return (pow(3, n) + 3 * pow(-1, n))//4
     
# Driver code
N = 10
print(numSeq(N))

C#




// C# implementation of the above approach
using System;
 
// Function to return the number of
// sequences that get back to Bob
class GFG
{
 
    static int numSeq(int n)
    {
        return (int) ((Math.Pow(3, n) + 3 *
                       Math.Pow(-1, n)) / 4);
    }
     
    // Driver code
    public static void Main()
    {
        int N = 10;
        Console.WriteLine(numSeq(N));
    }
}
 
// This code is contributed by AnkitRai01

Javascript




<script>
 
// Function to return the number of
// sequences that get back to Bob
function numSeq(n)
{
    return  Math.floor((Math.pow(3, n) + 3 * Math.pow(-1, n)) / 4);
}
 
// Driver code
 
    let N = 10;
    document.write(numSeq(N));
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Output: 
14763

 

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course

My Personal Notes arrow_drop_up
Recommended Articles
Page :