Найдите максимальное расстояние, которое можно преодолеть на n велосипедах
Всего имеется n велосипедов, каждый из которых может проехать 100 км на заправленном топливе. Какое максимальное расстояние вы можете проехать на n велосипедах? Вы можете предположить, что все велосипеды похожи, и велосипеду требуется 1 литр, чтобы проехать 1 км.
У вас есть n велосипедов, и на одном велосипеде вы можете проехать не более 100 км. Таким образом, если n мотоциклов стартуют с одной и той же точки и едут одновременно, вы можете проехать только 100 км. Давайте подумаем немного иначе, фокус в том, что когда вы хотите преодолеть максимальное расстояние, вы всегда должны стараться тратить минимум топлива. Минимальный расход топлива означает минимальное количество велосипедов. Вместо параллельного запуска n велосипедов вы можете подумать о их последовательном запуске. Это означает, что если вы переложите некоторое количество топлива с последнего велосипеда на другой и выбросите последний велосипед, то есть не запускайте последний велосипед после определенного момента. Но вопрос в том, через какое расстояние нужно произвести перекачку топлива, чтобы было преодолено максимальное расстояние и топливный бак оставшихся байков не переполнился.
Возьмем следующие базовые случаи, а затем обобщим решение.
- Базовый случай 1: Есть один велосипед: это просто, мы можем преодолеть только 100 км.
- Базовый случай 2: Есть два велосипеда: Какое максимальное расстояние мы можем преодолеть, когда есть два велосипеда? Чтобы увеличить расстояние, мы должны в какой-то момент бросить второй байк и передать его топливо первому. Давайте сделаем передачу через x кмс.
Общее пройденное расстояние = Расстояние, пройденное на 100 литров на первом велосипеде + Расстояние, пройденное за счет топлива, переброшенного из первый байк.
- Остаток топлива во втором байке - 100 - x. Если мы переместим это количество топлива на первый байк, то общее расстояние составит 100 + 100 - x, что равно 200 - x. Так что наша задача - максимизировать 200-х. Ограничение: 100 - x должно быть меньше или равно пространству, созданному на первом велосипеде после x кмс, то есть 100 - x <= x. Значение 200-x становится максимальным, когда x минимально. Минимально возможное значение x - 50. Таким образом, мы можем проехать 150 км.
- Базовый случай 3: Есть три велосипеда: пусть первая пересадка будет сделана через x км. После x дистанции все велосипеды содержат 100-кратное количество топлива. Если мы возьмем 100-кратное количество топлива с 3-го велосипеда и распределяем его между 1-м и 2-м велосипедами так, чтобы топливные баки 1-го и 2-го мотоциклов были заполнены. Итак, 100-x <= 2 * x; или, x = 33,333, поэтому мы должны передать оставшееся топливо третьего велосипеда и распределить это количество топлива между 1-м и 2-м велосипедом ровно через 33,33 км.
Давайте обобщим это. Если мы внимательно рассмотрим вышеупомянутые случаи, мы можем заметить, что если имеется n велосипедов, то первая передача выполняется (или велосипед падает) через 100 / n км / с. Если обобщить, то когда у нас осталось x литров топлива на каждом велосипеде и n оставшихся мотоциклов, мы бросаем велосипед через x / n км / с.
Following is the implementation of a general function.
C++
#include <stdio.h> // Returns maximum distance that can be traveled by n bikes and given fuel // in every bike double maxDistance( int n, int fuel) { // dist_covered is the result of this function double dist_covered = 0; while (n > 0) { // after ever fuel/n km we are discarding one bike and filling // all the other bikes with fuel/n liters of fuel i.e. to their // maximum limit (100 litre) dist_covered += ( double )fuel / n; n -= 1; // reduce number of bikes } return dist_covered; } // Driver program to test above function int main() { int n = 3; // number of bikes int fuel = 100; printf ( "Maximum distance possible with %d bikes is %f" , n, maxDistance(n, fuel)); return 0; } |
Java
// Java program to find the maximum // distance covered using n bikes import java.io.*; class GFG { // Function that returns maximum distance that can be traveled by n bikes // and given fuel in every bike static double maxDistance( int n, int fuel) { // dist_covered is the result of this function double dist_covered = 0 ; while (n > 0 ) { // after ever fuel/n km we are discarding one bike and filling // all the other bikes with fuel/n liters of fuel i.e. to their // maximum limit (100 litre) dist_covered += ( double )fuel / n; n -= 1 ; // reduce number of bikes } return dist_covered; } // driver program public static void main (String[] args) { int n = 3 ; // number of bikes int fuel = 100 ; System.out.println( "Maximum distance possible with " + n + " bikes is " + maxDistance(n, fuel)); } } // Contributed by Pramod Kumar |
Python3
# Python 3 program to find the maximum # distance covered using n bikes # Returns maximum distance that can be # traveled by n bikes and given fuel # in every bike def maxDistance(n, fuel): # dist_covered is the result # of this function dist_covered = 0 while (n > 0 ): # after ever fuel/n km we are # discarding one bike and filling # all the other bikes with fuel/n # liters of fuel i.e. to their # maximum limit (100 litre) dist_covered = dist_covered + (fuel / n) # reduce number of bikes n = n - 1 return dist_covered # Driver Code if __name__ = = "__main__" : n = 3 # number of bikes fuel = 100 print ( "Maximum distance possible with" , n, "bikes is" , maxDistance(n, fuel)) # This code is contributed by # Surendra_Gangwar |
C#
// C# program to find the maximum // distance covered using n bikes using System; class GFG { // Function that returns maximum distance // that can be travelled by n bikes // and given fuel in every bike static double maxDistance( int n, int fuel) { // dist_covered is the result of this function double dist_covered = 0; while (n > 0) { // after ever fuel/n km we are discarding // one bike and filling all the other bikes // with fuel/n liters of fuel i.e. to their // maximum limit (100 litre) dist_covered += ( double )fuel / n; n -= 1; // reduce number of bikes } return dist_covered; } // driver program public static void Main() { // number of bikes int n = 3; int fuel = 100; Console.WriteLine( "Maximum distance possible with " + n + " bikes is " + maxDistance(n, fuel)); } } // This code is contributed by Sam007 |
PHP
<?php // Returns maximum distance that can // be traveled by n bikes and given // fuel in every bike function maxDistance( $n , $fuel ) { // dist_covered is the result // of this function $dist_covered = 0; while ( $n > 0) { // after ever fuel/n km we are // discarding one bike and filling // all the other bikes with fuel/n // liters of fuel i.e. to their // maximum limit (100 litre) $dist_covered += (double) $fuel / $n ; // reduce number of bikes $n -= 1; } return $dist_covered ; } // Driver Code // number of bikes $n = 3; $fuel = 100; echo "Maximum distance possible with " , $n , " bikes is " , maxDistance( $n , $fuel ); // This code is contributed by ajit ?> |
Javascript
<script> // Javascript program to find the maximum // distance covered using n bikes // Function that returns maximum distance // that can be travelled by n bikes // and given fuel in every bike function maxDistance(n, fuel) { // dist_covered is the result of this function let dist_covered = 0; while (n > 0) { // After ever fuel/n km we are discarding // one bike and filling all the other bikes // with fuel/n liters of fuel i.e. to their // maximum limit (100 litre) dist_covered += fuel / n; // Reduce number of bikes n -= 1; } return dist_covered.toFixed(6); } // Driver code // Number of bikes let n = 3; let fuel = 100; document.write( "Maximum distance possible with " + n + " bikes is " + maxDistance(n, fuel)); // This code is contributed by divyesh072019 </script> |
Выход :
Maximum distance possible with 3 bikes is 183.333333
Эта статья предоставлена Шамиком Митрой. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.