Given N containers consisting of N copies of number A and N copies of number B. We need to arrange the numbers in the N containers in such a way that the probability of choosing a container randomly and drawing one copy of number A is maximum.
Examples:
Input : N = 1
Output : 0.5,
Input : N = 2
Output : 0.667
We need to look for an optimal arrangement of the N copies of number A and N copies of number B in N containers.
Pi = (Favorable Outcomes) / (Total Outcomes)
where Pi denotes the probability of an event i.
So to maximize this, either we minimize the denominator (i.e., the total outcomes) or maximize the numerator (i.e., the total favorable Outcomes) keeping the other constant.
Consider a possible arrangement where in the first (N-1) containers we put only copies of Number A, such that first (N-1) containers contain (N-1) copies of the Number A and no copy of number B. The left out copy of number A and the N copies of number B are then put in the last container.
Probability (copy of A from any of the first (N-1) containers) = Pn-1 containers = 1
Probability (copy of A from Nth container) = PN = 1?(N+1)
Pmax = PN-1 containers * (N – 1) + PN
? Pmax = N / (N + 1)
C++
#include <bits/stdc++.h>
using namespace std;
double calculateProbability( int N)
{
double probability = ( double )N / (N + 1);
return probability;
}
int main()
{
int N;
double probabilityMax;
N = 1;
probabilityMax = calculateProbability(N);
cout << "Maximum Probability for N = "
<< N << " is, " << setprecision(4)
<< fixed << probabilityMax << endl;
N = 2;
probabilityMax = calculateProbability(N);
cout << "Maximum Probability for N = "
<< N << " is, " << setprecision(4)
<< fixed << probabilityMax << endl;
N = 10;
probabilityMax = calculateProbability(N);
cout << "Maximum Probability for N = "
<< N << " is, " << setprecision(4)
<< fixed << probabilityMax << endl;
return 0;
}
|
Java
class GFG {
static double calculateProbability( int N)
{
double probability = ( double )N / (N + 1 );
return probability;
}
public static void main(String[] args)
{
int N;
double probabilityMax;
N = 1 ;
probabilityMax = calculateProbability(N);
System.out.println( "Maximum Probability for"
+ " N = " + N + " is, " + Math.round(
probabilityMax * 10000.0 ) / 10000.0 );
N = 2 ;
probabilityMax = calculateProbability(N);
System.out.println( "Maximum Probability for N = "
+ N + " is, " + Math.round(
probabilityMax * 10000.0 ) / 10000.0 );
N = 10 ;
probabilityMax = calculateProbability(N);
System.out.println( "Maximum Probability for N = "
+ N + " is, " + Math.round(
probabilityMax * 10000.0 ) / 10000.0 );
}
}
|
Python3
def calculateProbability(N):
probability = N / (N + 1 )
return probability
N = 1
probabilityMax = calculateProbability(N)
print ( "Maximum Probability for N = " ,
N , "is, %.4f" % probabilityMax)
N = 2
probabilityMax = calculateProbability(N);
print ( "Maximum Probability for N =" ,
N, "is, %.4f" % probabilityMax)
N = 10
probabilityMax = calculateProbability(N);
print ( "Maximum Probability for N =" ,
N, "is, %.4f" % probabilityMax)
|
C#
using System;
class GFG {
static double calculateProbability( int N)
{
double probability = ( double )N / (N + 1);
return probability;
}
public static void Main ()
{
int N;
double probabilityMax;
N = 1;
probabilityMax = calculateProbability(N);
Console.WriteLine( "Maximum Probability for N = "
+ N + " is, " +
Math.Round(probabilityMax * 10000.0) / 10000.0);
N = 2;
probabilityMax = calculateProbability(N);
Console.WriteLine( "Maximum Probability for N = "
+ N + " is, " +
Math.Round(probabilityMax * 10000.0) / 10000.0);
N = 10;
probabilityMax = calculateProbability(N);
Console.WriteLine( "Maximum Probability for N = "
+ N + " is, " +
Math.Round(probabilityMax * 10000.0) / 10000.0);
}
}
|
PHP
<?php
function calculateProbability( $N )
{
$probability = $N / ( $N + 1);
return $probability ;
}
$N = 1;
$probabilityMax = calculateProbability( $N );
echo ( "Maximum Probability for N = " .
$N . " is, " .
round ( $probabilityMax , 4). "\n" );
$N = 2;
$probabilityMax = calculateProbability( $N );
echo ( "Maximum Probability for N = " .
$N . " is, " .
round ( $probabilityMax , 4) . "\n" );
$N = 10;
$probabilityMax = calculateProbability( $N );
echo ( "Maximum Probability for N = " .
$N . " is, " .
round ( $probabilityMax , 4) . "\n" );
?>
|
Javascript
<script>
function calculateProbability(N)
{
let probability = N / (N + 1);
return probability;
}
let N;
let probabilityMax;
N = 1;
probabilityMax = calculateProbability(N);
document.write( "Maximum Probability for" +
" N = " + N + " is, " + Math.round(
probabilityMax * 10000.0) / 10000.0 + "<br/>" );
N = 2;
probabilityMax = calculateProbability(N);
document.write( "Maximum Probability for N = " + N +
" is, " + Math.round(
probabilityMax * 10000.0) / 10000.0 + "<br/>" );
N = 10;
probabilityMax = calculateProbability(N);
document.write( "Maximum Probability for N = " +
N + " is, " + Math.round(
probabilityMax * 10000.0) / 10000.0 + "<br/>" );
</script>
|
Output: Maximum Probability for N = 1 is, 0.5000
Maximum Probability for N = 2 is, 0.6667
Maximum Probability for N = 10 is, 0.9091
Time Complexity of the above program is O(1).