Задача
Встреча. Из пункта А в пункт В выехал велосипедист со скоростью [latex]v_{0} [/latex] км/час. Одновременно навстречу ему из пункта В двинулся «автостопом» другой путник.[latex]s_{1} [/latex] м он двигался со скоростью [latex]v_{1} [/latex] м/час, [latex]s_{2} [/latex] м — со скоростью [latex]v_{0} [/latex] км/час, [latex]s_{3} [/latex] м — со скоростью [latex]v_{3} [/latex] км/час. Через сколько часов после старта и в какой точке путники встретились?
Тесты
v0, км/час | v1, м/час | v3, км/час | s1, м | s2, м | s3, м | place, км | time, час | Комментарии |
40 | 15000 | 10 | 20000 | 40000 | 40000 | 66.667 | 1.667 | Пройден (встреча на первом промежутке) |
10 | 5000 | 60 | 10000 | 60000 | 30000 | 55.0 | 5.5 | Пройден (встреча на первом промежутке) |
8 | 5000 | 30 | 10000 | 10000 | 80000 | 37.368 | 4.671 | Пройден (встреча на первом промежутке) |
-300 | 30000 | 23333 | 22222 | 5454 | 555.1 | Неправильно введены данные | Не пройден | |
10 | 2222 | 3333 | 0 | -4444 | 11.6 | Неправильно введены данные | Не пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <iostream> #include <math.h> int main() { double v0, v1, v3, place, ss, s1, s2, s3, time, t1, t2, t3 ; //Описание переменных для хранения входных данных.// scanf("%lf%lf%lf%lf%lf%lf", & v0, & v1, & v3, & s1, & s2, & s3) ; //Чтение из стандартного потока ввода.// if ( ( v0 > 0 ) && ( v1 > 0 ) && ( v3 > 0 ) && ( s1 >= 0 ) && ( s2 >= 0 ) && ( s3 >= 0 ) ) //Критерии ввода данных.// { s1 *= 0.001 ; v1 *= 0.001 ; s2 *= 0.001 ; s3 *= 0.001 ; //Перевод единиц в систему СИ. (м --> км, м/час --> км/час) // ss = s1 + s2 + s3 ; //Найдем весь путь// t1 = s1 / v1 ; t2 = s2 / v0 ; t3 = s3 / v3 ; //Найдем время за которое второй путник преодолевает каждую часть пути// if ( ( ss - t1 * v0 - s1 ) <= 0 ) //Условие встречи двух путников на первом промежутке пути// { time = ss / ( v0 + v1 ) ; //Нахождение времени встречи// place = time * v0 ; //Нахождение места встречи// printf("Путники встретились на расстоянии %5.3lf км от пункта В через %5.3lf часов после старта", place, time) ; //Вывод конечного результата.// } else { if ( ( ss - ( t2 + t1 ) * v0 - s1 - s2 ) <=0 ) //Условие встречи двух путников на втором промежутке пути// { time = ( ss - s1 - ( v0 * t1 ) ) / ( v0 + v0 ) ; //Нахождение времени встречи// place = ( t1 + time ) * v0 ; //Нахождение места встречи// printf("Путники встретились на расстоянии %5.3lf км от пункта В через %5.3lf часов после старта", place, time+t1) ; //Вывод конечного результата.// } else { if ( ( ss - ( t2 + t1 + t3 ) * v0 - s1 - s2 - s3 ) <= 0 ) //Условие встречи двух путников на третем промежутке пути// { time = ( ss - s1 - s2 - ( v0 * ( t2 + t1 ) ) ) / ( v0 + v3 ) ; //Нахождение времени встречи// place = ( t1 + t2 + time ) * v0 ; //Нахождение места встречи// printf("Путники встретились на расстоянии %5.3lf км от пункта A через %5.3lf часов после старта", place, time+t1+t2) ; //Вывод конечного результата.// } } } } else { printf("Неправильно введены данные"); //Вывод оповещения о неправильном вводе данных (при несоответствии начальным критериям). } return 0; } |
Можно предположить, что весь путь в задаче представлен суммой [latex]ss=s_{1}+s_{2}+s_{3}[/latex]. Для начала переведем все величины в единицы СИ:
Из метров в километры:
[latex]s_{1}=s_{1}*0.001 \Leftrightarrow s_{1}=\frac{s_{1}}{1000}[/latex], [latex]s_{2}=s_{2}*0.001 \Leftrightarrow s_{2}=\frac{s_{2}}{1000}[/latex], [latex]s_{3}=s_{3}*0.001 \Leftrightarrow s_{3}=\frac{s_{3}}{1000}[/latex].Из метров/час в километры/час: [latex]v_{1}=v_{1}*0.001 \Leftrightarrow v_{1}=\frac{v_{1}}{1000}[/latex]
Найдем место встречи. Тут может быть три случая:
- Встреча двух путников на первом промежутке пути. Тогда время встречи можно вычислить по формуле: [latex]time = \frac{ss}{( v_{0} + v_{1} )}[/latex] , а место встречи — [latex]place = time * v_{0}[/latex]
- Встреча двух путников на втором промежутке пути: Тогда время встречи можно вычислить по формуле: [latex]time =\frac{ss — s_{1} — ( v_{0} * t_{1} ) }{ v_{0} + v_{0} }[/latex] , а место встречи — [latex]place = ( t_{1} + time ) * v_{0}[/latex].
- Встреча двух путников на третьем промежутке пути: Тогда время встречи можно вычислить по формуле: [latex]time = \frac{ ss — s_{1} — s_{2} — ( v_{0} * t_{2} )}{ v_{0}+ v_{3} }[/latex], а место встречи — [latex] place = ( t_{1}+t_{2} + time ) * v_{0}[/latex].
Если путники встречаются на первом промежутке пути, то их скорости суммируются (т.к. тела движутся на встречу друг к другу), при делении всего пути на сумму этих скоростей получим время встречи, расстояние можно найти умножив время встречи на скорость первого путника.
Если путники встречаются на втором промежутке пути, то их скорости аналогично суммируются, но в формуле нахождения времени встречи учитывается путь, пройденный путниками за первый промежуток времени, эту разность делим на сумму скоростей и получаем время встречи. Для того чтобы найти место встречи сложим время путников в пути и время встречи поделим на скорость и найдем место встречи.
Аналогично и на третьем промежутке пути. В формуле нахождения времени встречи учитывается путь, пройденный путниками за первый и за второй промежутки времени, эту разность делим на сумму скоростей и получаем время встречи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import java.util.*; import java.lang.*; import java.io.*; class Meeting { public static void main (String[] args) throws java.lang.Exception { double place, ss, time, t1, t2, t3, tt; //Описание переменных для хранения входных данных.// Scanner in = new Scanner(System.in); //Чтение из стандартного потока ввода.// double v0 = in.nextDouble(); double v1 = in.nextDouble(); double v3 = in.nextDouble(); double s1 = in.nextDouble(); double s2 = in.nextDouble(); double s3 = in.nextDouble(); if ((v0 > 0) && (v1 > 0) && (v3 > 0) && (s1 >= 0) && (s2 >= 0) && (s3 >= 0)) //Критерии ввода данных.// { s1 *= 0.001; v1 *= 0.001; s2 *= 0.001; s3 *= 0.001; //Перевод единиц в систему СИ. (м --> км, м/час --> км/час) // ss = s1 + s2 + s3; //Найдем весь путь// t1 = s1 / v1; t2 = s2 / v0; t3 = s3 / v3; //Найдем время за которое второй путник преодолевает каждую часть пути// if ((ss - t1 * v0 - s1) <= 0) //Условие встречи двух путников на первом промежутке пути// { time = ss / (v0 + v1); //Нахождение времени встречи// place = time * v0; //Нахождение места встречи// System.out.printf("Путники встретились на расстоянии " + place + " км от пункта В через " + time + " часов после старта"); //Вывод конечного результата.// } else { if ((ss - (t2 + t1) * v0 - s1 - s2) <= 0) //Условие встречи двух путников на втором промежутке пути// { time = (ss - s1 - (v0 * t1)) / (v0 + v0); //Нахождение времени встречи// place = (t1 + time) * v0; //Нахождение места встречи// tt = time + t1; System.out.printf("Путники встретились на расстоянии " + place + " км от пункта В через " + tt + " часов после старта") ; //Вывод конечного результата.// } else { if ((ss - (t2 + t1 + t3) * v0 - s1 - s2 - s3) <= 0) //Условие встречи двух путников на третем промежутке пути// { time = (ss - s1 - s2 - (v0 * (t2 + t1))) / (v0 + v3); //Нахождение времени встречи// place = (t1 + t2 + time) * v0; //Нахождение места встречи// tt = time + t1 + t2; System.out.printf("Путники встретились на расстоянии " + place + " км от пункта A через " + tt + " часов после старта"); //Вывод конечного результата.// } } } } else { System.out.printf("Неправильно введены данные"); //Вывод оповещения о неправильном вводе данных (при несоответствии начальным критериям). } } } |
Для отправки комментария необходимо войти на сайт.