Задача
Три грибника Петя, Вася и Николай, возвращаясь из лесу домой, решили устроить привал, а заодно и перекусить. Как это у нас принято, через некоторое время каждый начал сначала хвастаться своими сегодняшними успехами, а со временем, а так все трое были друзьями, то вскоре начали делить найденными ими грибы между собой и своими товарищами.
Сначала Пётр дал Васе и Николаю по столько грибов, сколько у них уже было. Николай быстро понял, что так будет не по-братски, и дал Василию и Петру по столько грибов, по сколько у них стало. Василий не мог отстать от сотоварищей и также дал каждому из друзей по столько грибов, сколько у них этому моменту имелось. И тут друзья с удивлением обнаружили, что у всех стало грибов поровну.
Сколько грибов было у каждого перед привалом, если известно, что все вместе они собрали [latex]n[/latex] грибов?
Входные данные
В единственной строке находится единственное натуральное число [latex]n[/latex] ([latex]n ≤ 30000[/latex]).
Выходные данные
В единственной строке вывести через пробел количество грибов перед привалом у Петра, Василия и Николая, соответственно. Гарантируется, что все входные данные корректны.
Тесты
Входные данные
|
Выходные данные |
[latex]24[/latex] | [latex]13[/latex] [latex]4[/latex] [latex]7[/latex] |
[latex]48[/latex] | [latex]26[/latex] [latex]8[/latex] [latex]14[/latex] |
[latex]72[/latex] | [latex]39[/latex] [latex]12[/latex] [latex]21[/latex] |
[latex]96[/latex] | [latex]52[/latex] [latex]16[/latex] [latex]28[/latex] |
[latex]120[/latex] | [latex]65[/latex] [latex]20[/latex] [latex]35[/latex] |
[latex]144[/latex] | [latex]78[/latex] [latex]24[/latex] [latex]42[/latex] |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.BufferedReader; import java.io.InputStreamReader; class Main { public static void main (String[] args) throws java.lang.Exception { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String[] params1 = bufferedReader.readLine().split(" "); int n = Integer.parseInt(params1[0]); System.out.printf("%d %d %d", n * 13 / 24, n / 6, n * 7 / 24); } } |
Решение задачи
Представим нашу задачу в форме таблицы, строки которой будут соответствовать грибникам, а столбцы — количеству грибов у соответствующего грибника между обменами:
П.
|
[latex]x_{1}[/latex] | [latex]x_{2} = x_{1} — y_{1} — z_{1}[/latex] | [latex]x_{3} = 2 \cdot x_{2}[/latex] | [latex]x_{4} = 2 \cdot x_{3}[/latex] |
В.
|
[latex]y_{1}[/latex] | [latex]y_{2} = 2 \cdot y_{1}[/latex] | [latex]y_{3} = 2 \cdot y_{2}[/latex] | [latex]y_{4} = y_{3} — x_{3} — z_{3}[/latex] |
Н.
|
[latex]z_{1}[/latex] | [latex]z_{2} = 2 \cdot z_{1}[/latex] | [latex]z_{3} = z_{2} — x_{2} — y_{2}[/latex] | [latex]z_{4} = 2 \cdot x_{3}[/latex] |
По условию задачи [latex]x_{4} = y_{4} = z_{4} = \frac n 3[/latex]. Тогда выражением нужных корней и подстановкой известных считаем [latex]x_{1}[/latex], [latex]y_{1}[/latex] и [latex]z_{1}[/latex] начиная с правого столбца и двигаясь налево:
[latex]x_{3} = \frac {x_{4}}{2} = \frac {n}{6}[/latex] |
[latex]z_{3} = \frac {z_{4}}{2} = \frac {n}{6}[/latex] |
[latex]y_{3} = y_{4} + x_{3} + z_{3}= \frac {n}{3} + \frac {n}{6} + \frac {n}{6} = \frac {2 \cdot n}{6}[/latex] |
[latex]x_{2} = \frac {x_3}{2} = \frac {n} {12}[/latex] |
[latex]y_{2} = \frac {y_3}{2} = \frac {n}{3}[/latex] |
[latex]z_{2} = z_{3} + y_{2} + x_{2} = \frac {n}{6} + \frac {n}{12} + \frac {n}{3} = \frac {7 \cdot n}{12}[/latex] |
[latex]y_{1} = \frac {y_{2}}{2} = \frac {n}{6}[/latex] |
[latex]z_{1} = \frac {z_2}{2} = \frac {7 \cdot n}{24}[/latex] |
[latex]x_{1} = x_{2} + y_{1} + z_{1} = \frac {n}{12} + \frac {n}{6} + \frac {6 \cdot n}{12} = \frac {13 \cdot n}{24}[/latex] |
Получили ответы: [latex]x_{1} = \frac {13 \cdot n}{24}[/latex], [latex]y_{1} = \frac {n}{6}[/latex] и [latex]z_{1} = \frac {7 \cdot n}{24}[/latex]. Это и будет количество грибов соответственно у Пети, Васи и Николая в самом начале. Отсюда получаем итоговую формулу решения, указанную в коде программы.
Ссылки
Условие задачи на e-olymp
Код решения на ideone.com