Minimum time required to fill a cistern using N pipes - GeeksforGeeks

13 Apr, 2021
Given the time required by a total of N+1 pipes where N pipes are used to fill the Cistern and a single pipe is used to empty the Cistern. The task is to Calculate the amount of time in which the Cistern will get filled if all the N+1 pipes are opened together.
Examples: 
Input: n = 2, 
pipe1 = 12 hours, pipe2 = 14 hours,
emptypipe = 30 hours
Output: 8 hours

Input: n = 1, 
pipe1 = 12 hours
emptypipe = 18 hours
Output: 36 hours 
Approach: 
If a pipe1 can fill a cistern in ‘n’ hours, then in 1 hour, the pipe1 will able to fill ‘1/n’ Cistern.
Similarly If a pipe2 can fill a cistern in ‘m’ hours, then in one hour, the pipe2 will able to fill ‘1/m’ Cistern.
So on.... for other pipes.
So, total work done in filling a Cistern by N pipes in 1 hours is 
1/n + 1/m + 1/p...... + 1/zWhere n, m, p ....., z are the number of hours taken by each pipes respectively.
The result of the above expression will be the part of work done by all pipes together in 1 hours, let’s say a / b.To calculate the time taken to fill the cistern will be b / a.
Consider an example of two pipes: 
Time taken by 1st pipe to fill the cistern = 12 hours Time taken by 2nd pipe to fill the cistern = 14 hours Time taken by 3rd pipe to empty the cistern = 30 hoursWork done by 1st pipe in 1 hour = 1/12 Work done by 2nd pipe in 1 hour = 1/14 Work done by 3nd pipe in 1 hour = – (1/30) as it empty the pipe. So, total work done by all the pipes in 1 hour is => ( 1 / 12 + 1/ 14 ) – (1 / 30) => ((7 + 6 ) / (84)) – (1 / 30) => ((13) / (84)) – (1 / 30) => 51 / 420So, to Fill the cistern time required will be 420 / 51 i.e 8 hours Approx.
Below is the implementation of above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of above approach#include <bits/stdc++.h>using namespace std; // Function to calculate the timefloat Time(float arr[], int n, int Emptypipe){     float fill = 0;    for (int i = 0; i < n; i++)        fill += 1 / arr[i];     fill = fill - (1 / (float)Emptypipe);     return 1 / fill;} // Driver Codeint main(){    float arr[] = { 12, 14 };    float Emptypipe = 30;    int n = sizeof(arr) / sizeof(arr[0]);     cout << floor(Time(arr, n, Emptypipe)) << " Hours";     return 0;}
// Java implementation of// above approachimport java.io.*; class GFG{     // Function to calculate the timestatic float Time(float arr[], int n,                  float Emptypipe){    float fill = 0;    for (int i = 0; i < n; i++)        fill += 1 / arr[i];     fill = fill - (1 / (float)Emptypipe);     return 1 / fill;} // Driver Codepublic static void main (String[] args){    float arr[] = { 12, 14 };    float Emptypipe = 30;    int n = arr.length;         System.out.println((int)(Time(arr, n,                        Emptypipe)) + " Hours");}} // This code is contributed// by inder_verma.
# Python3 implementation of# above approach # Function to calculate the timedef Time(arr, n, Emptypipe) :     fill = 0    for i in range(0,n) :        fill += (1 / arr[i])     fill = fill - (1 / float(Emptypipe))     return int(1 / fill)  # Driver Codeif __name__=='__main__':    arr = [ 12, 14 ]    Emptypipe = 30    n = len(arr)    print((Time(arr, n, Emptypipe))          , "Hours") # This code is contributed by# Smitha Dinesh Semwal
// C# implementation of// above approachusing System; class GFG{     // Function to calculate the timestatic float Time(float []arr, int n,                  float Emptypipe){    float fill = 0;    for (int i = 0; i < n; i++)        fill += 1 / arr[i];     fill = fill - (1 / (float)Emptypipe);     return 1 / fill;} // Driver Codepublic static void Main (){    float []arr = { 12, 14 };    float Emptypipe = 30;    int n = arr.Length;         Console.WriteLine((int)(Time(arr, n,                             Emptypipe)) +                                " Hours");}} // This code is contributed// by inder_verma.
<?php// PHP implementation of above approach // Function to calculate the timefunction T_ime($arr, $n, $Emptypipe){    $fill = 0;    for ($i = 0; $i < $n; $i++)        $fill += 1 / $arr[$i];     $fill = $fill - (1 / $Emptypipe);     return 1 / $fill;} // Driver Code$arr = array( 12, 14 );$Emptypipe = 30;$n = count($arr); echo (int)T_ime($arr, $n,                $Emptypipe) . " Hours"; // This code is contributed// by inder_verma.?>
<script> // Javascript implementation of above approach // Function to calculate the timefunction Time(arr, n, Emptypipe){    var fill = 0;    for(var i = 0; i < n; i++)        fill += 1 / arr[i];     fill = fill - (1 / Emptypipe);     return 1 / fill;} // Driver Codevar arr = [ 12, 14 ];var Emptypipe = 30;var n = arr.length; document.write(Math.floor(    Time(arr, n, Emptypipe)) + " Hours");     // This code is contributed by itsok </script>
8 Hours
 
inderDuMCA
Smitha Dinesh Semwal
itsok
Pipes and Cisterns
Mathematical
School Programming
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Count all possible paths from top left to bottom right of a mXn matrix
Modular multiplicative inverse
Program to multiply two matrices
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects