Переходим дорогу вслепую

  • 8
  • Недоступна
Допустим, мы точно знаем, что в начале каждого часа на нашем светофоре в течение 3 минут горит зелёный, потом минуту — жёлтый, и ещё минуту — красный свет, а затем всё повторяется. Наша программа должна определить, какой свет горит сейчас («сейчас» — это некое вещественное число, определяющееся временем в минутах, прошедших с начала очередного часа).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (616)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Artem Ovsenev4 уровень
час назад
23 попытки, Карл! 🤪🤪🤪 с условиями "Желтого" замучался
Павел4 уровень
суббота, 18:53
Понятно что происходит если брать остаток по модулю больше 5 минут(например 6). Не понятно,что происходит при 2.5, ведь 2.5/5=0.5, 3/5=0.6. Объясните пожалуйста
Sono Io6 уровень
понедельник, 17:35
Насколько я понимаю, хотя возможно и неверно, при таком делении по модулю остаток будет равен делимому. То есть: 3%5 = 3, 4%5 = 4. Поправьте, пожалуйста, если я ошибаюсь. Поэтому весь наш пятиминутный цикл укладывается в рамки, в которых вы как раз и запутались. Я отложила эту задачу "на потом", сейчас вернулась, решила. Не с первого раза, конечно же, но сама, и с пониманием, с какой стороны к ней подойти. Поэтому, если у вас сложности с ней на данном этапе, вернитесь чуть позже и сделайте)
Andrei Leushin5 уровень, Пинск
7 сентября, 06:23
Ломал голову 3 часа как сделать всё красиво, в итоге подсказал друг. Нужно остаток от деления double перевести в инт и дальше все просто. Напишу немного чтобы было понятнее например у вас вводимое значение double = time переводим остаток от деления в int int temptime = (int) (time%5); и дальше уже через if выводите когда какой цвет горит if(temptime<3) <4 <5 Лайк кому помог
Kirill4 уровень, Санкт-Петербург
суббота, 13:53
в int переводить не нужно, с double тоже всё прекрасно работает.
Alexandr7 уровень, Самара
6 сентября, 14:57
Подскажите как правильно организовать чтение через import java.io.BufferedReader; import java.io.InputStreamReader; А то я через import java.util.Scanner; делаю
Andrei Leushin5 уровень, Пинск
7 сентября, 06:30
забудьте про сканер import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; BufferedReader bufferedReader = new BufferedReader(InputStreamReader(System.in)); String s = bufferedReader.readLine(); // для ввода текста int n = Integer.parseInt(bufferedReader.readLine()); // для ввода целых чисел double m = Double.parseDouble(bufferedReader.readLine()); // для ввода дробных чисел
Alexandr7 уровень, Самара
7 сентября, 16:37
Спасибо
Alexandr7 уровень, Самара
7 сентября, 16:40
Кстати, а чем плох сканер?
Анатолий4 уровень, Самара
11 сентября, 11:43
в этих заданиях используется import java.io.BufferedReader; import java.io.InputStreamReader;
Alexandr7 уровень, Самара
11 сентября, 13:22
Да я видел. сейчас уже разобрался с чтением. есть статья на эту тему: https://javarush.ru/groups/posts/1919-schitihvanie-s-klaviaturih--riderih
Никита6 уровень, Москва
28 августа, 20:45
Изначально думал решать через остаток от числа, но очень долго не мог понять, как выводить любое число, а не только в промежутке от 0 до 5. Попробую подсказать тем, кто заплутал. Для начала посчитайте, через сколько минут загорается зеленый, ведь он загорается через одно и то же время. Затем попробуйте понять, почему при условных 23.5 % 5 = 3,5 выводится желтый, а при условных 44.3 % 5 = 4.3 выводится красный. Как только я это понял, все стало очень легко. Успехов!:)
Andrei Leushin5 уровень, Пинск
6 сентября, 18:10
пробовал решать через %5 ничего не вышло, придется идти через < >
Николай4 уровень, Москва
26 августа, 20:08
Очень долго думал над задачей и обсуждении заметил t = t % 5. В чем смысл этого выражения, что с его помощью получаем? Можете рассказать, у кого будет время?)))))))
COD4 уровень, Москва
27 августа, 10:48
% означает остаток. Если мы напишем 6 % 5, то получим 1, если мы напишем 10 % 5, то получим 0.
Olga5 уровень, Москва
7 сентября, 12:49
я думала над этим не просто "долго", а недели три, но продвинулась в написании только сегодня, и сегодня же и решила ))) вряд ли тут найдется кто-то, кто сидел над ней столько же)) Собственно, пришлось все равно заглянуть в подсказки и то - не сразу поняла. Но в чем смысл - попробую объяснить. Цикл длится 5 минут. Разделив количество введенных минут на количество минут в цикле мы узнаем, сколько раз в этом числе повторится цикл полностью (три минуты зеленых, 1 желтая, 1 красная), тем самым избавляя себя от того, чтобы 12 раз (а количество пятиминутных циклов в 60 == 12) писать if-else под каждое условие. А дальше остаток от этого деления показывает нам, на каком конкретно месте прервался новый цикл и какому периоду из этого цикла он соответствует. Ну а периоды задаем стандартно через if else. Не считая вводных условий, сам может состоять всего из 6 строчек. Главная сложность была в этой задаче для меня - это понять это деление на пять. Причем, я дошла до деления на 5 сама, когда отсчитывала количество пятиминутных циклов в 60, а дальше меня заклинило и что с этим делать дальше я не знала.
Ева7 уровень, Алматы
24 августа, 21:30
Побольше про Mod и остаток в программировании: https://habr.com/ru/post/421071/
Nikita7 уровень
19 августа, 17:10
Если сделать так, то будет правильно, что ровно в 3 минуты желтый цвет загарается.
if ( t >= 0.0 && t < 3.0 )
Kirill Konovalov7 уровень
15 июля, 22:48
Я похоже единственный, как дурак, решил не через %5, а %10 :D Ну ладно, на ответы во время решения хоть не смотрел) Решил быстро, нашел решение за минут 10, только реализовывал дольше, код длинный получился, фиксил все время, в 3 ночи мозг забыл что по модулю можно на любое число делить D:
ShyBerserk8 уровень, Москва
15 июля, 15:12
Прекрасно решил через int, валидаотор ругался. Пришлось, скрипя зубами, переделывать с double.