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

  • 8
  • Недоступна
Допустим, мы точно знаем, что в начале каждого часа на нашем светофоре в течение 3 минут горит зелёный, потом минуту — жёлтый, и ещё минуту — красный свет, а затем всё повторяется. Наша программа должна определить, какой свет горит сейчас («сейчас» — это некое вещественное число, определяющееся временем в минутах, прошедших с начала очередного часа).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (694)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Dmytro Bondarenko 5 уровень
около 7 часов назад
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String st = reader.readLine(); float t = Float.parseFloat(st); float x = 0.0f; while (true){ x += 3.0f; if (x > t){ System.out.println("зелёный"); break; } x += 1.0f; if (x>t){ System.out.println("жёлтый"); break; } x += 1.0f; if (x>t){ System.out.println("красный"); break; } }
MaxGideon 4 уровень, Москва
14 января, 10:55
Тоже не понял по задаче почему не проходит решение...вывод в IDE корректный с любыми входными данными но все равно решение ругается на вывод))): public static void main(String[] args) throws Exception { BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); double minutes = Double.parseDouble(br1.readLine()); double x = 0; double y = 3; double z = 4; double v = 5; while (v < 61){ if (minutes>= x && minutes <y){ System.out.println("зеленый"); break; }else if(minutes >= y && minutes < z){ System.out.println("желтый"); break; }else if(minutes >= z&& minutes < v){ System.out.println("красный"); break; } x+=5; y+=5; z+=5; v+=5; } }
Святослав 4 уровень, Одесса
14 января, 18:03
Достаточно создать одну новую переменную double a = t % 5; И тогда дальше становится всё просто if (a<3) { System.out.println("зелёный"); } else if (a<4) { System.out.println("жёлтый"); } else System.out.println("красный"); }
Алексей Тонких Backend Developer в СберТех
16 января, 18:22
В Вашем решении не учитывается случай, когда введено количество минут больше часа (например, 63.5) - выход из цикла произойдет раньше, чем будет проверено условие. Можно перед сравнением получить остаток от деления введённого числа на 60. Кроме того обратите внимание на выводимый текст - буквы е/ё существенны.
oneDollarGourmet 8 уровень
12 января, 19:41
решение задачи подсмотрел. запомнил и решил. но меня грызет совесть, потому что я не понимаю как она решается. вернее, смотрю на код решенной задачи - вроде все понятно, очевидно. но сам додуматься до решения не могу. например, не понятен момент с делением на 5. для чего делить и почему именно на 5? этот момент вообще не понятен Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зелёный сигнал, затем в течение одной минуты - жёлтый, а потом в течение одной минуты - красный, затем опять зелёный горит три минуты и т. д.. помогите
Dmitry economic security
13 января, 20:39
3 минуты - горит зеленый 1 минута - горит желтый 1 минута - горит красный 3+1+1 = 5 минут Один час 60 минут, то есть 12 циклов по 5 минут. t % 5 < 3 - зеленый, 1 (минута) делить на 5 это 0 целых 1 в остатке 1 < 3 - значит зеленый 2 делить на 5 это 0 целых 2 в остатке 2 < 3 - зеленый t % 5 < 4 - желтый t % 5 < 5 - красный при делении на 5 - остаток не может быть больше 5 ...и остаток это не то число которое после запятой))) 8 ÷ 5 = 1,6 (6 - это не остаток),
oneDollarGourmet 8 уровень
13 января, 22:14
правильно понимаю что при делении на n число - остаток не может быть больше n числа? где n - любое число
oneDollarGourmet 8 уровень
13 января, 22:17
зеленый горит три минуты. желтый начинает гореть на четвертой минуте, а красный - на пятой. и на шестой минуте начинает гореть зеленый. а в требованиях к задачи задано, что зеленый начинает гореть под цифрой - 5 не совсем точная задача, получается
Dmitry economic security
14 января, 18:40
нет, зеленый горит до 2,9999 3 - 3,999 желтый 4 -4,999 красный 5 - 7.999 -зеленый, 8-9 желтый, 9-10 красный и т.д.
oneDollarGourmet 8 уровень
14 января, 18:49
понял. спасибо большое
Simpson 4 уровень, Белгород
16 января, 15:48
5 минут это цикл работы светофора. то есть если деление по модулю на 5 меньше трех то это диапазон первого условия. например 17 % 5 дает остаток 2. 2 < 3 и значит горит зеленый. 2. 5 при делении по модулю дает так же 2.5 что меньше трех и значит горит зеленый.
Rupert_Net 5 уровень, Москва
16 января, 20:49
Вы всё правильно поняли. Да этот остаток не может быть больше n (число на которое делят). Он всегда меньше этого числа. Добавлю свои пять копеек про этот замечательный оператор %. Я сначала не догонял, - откуда эти остатки берутся ? Т.е. например просто 12:5 =2,4 и, как бы, в мыслях было, что этот (%) должен вернуть 4 (остаток) , тогда как дебаг мне выдавал число 2 .А блин всё просто - 4/10 это же 2/5 - вот откуда эта цифра два (ДВЕ /пятых). То-есть оператор(%) выдаёт долю числа n.
Ледовских Виктория 4 уровень, Москва
9 января, 20:38
Помогите, плиз.. Решила, криво очень(поняла когда прочитала комменты), но прям вот сама, без подсказок. И вроде бы код рабочий, не прохожу проверку, ругается, что не прохожу по трём последним пунктам, что не выводит , жёлтый, зелёный, красный, в чём проблема? public class Solution { public static void main(String[] args) throws Exception { Scanner x = new Scanner(System.in); double t = x.nextDouble(); double a, c, i; for (a=0; a<=60.0; a += 5.0){ double b = 3.0; if (t !=0 && (a<=t & t< (a+b))){ System.out.println("зелёный"); } } for (c=3.0; c<=60.0; c +=5.0){ double d = 1.0; if (t !=0 && (c<=t & t< (c+d))){ System.out.println("жёлтый"); } } for (i=4.0; i<=60.0; i +=5.0){ double q = 1.0; if (t !=0 && (i<=t & t< (i+q))){ System.out.println("красный"); } } } }
Regina Bulanova 19 уровень, Рязань
10 января, 14:43
Три последних требования не выполняются, т.к. этот код вообще не решает задачу. Вот что нужно исправить: 1) У вас очень много переменных, которые не нужны. Задача решается с применением одной, максимум - двух переменных. 2) Цикл for - штука хорошая, но здесь хватит if и if else. Тут внизу есть мой коммент про задачу, возможно, он поможет
Доброго времени суток, друзья! Я решил скорее всего не рационально, но расскажу идею. Я решил индукцией. Рассмотрел сначала для 5 минут : 3 минуты - зелёный, 1 минута - жёлтый, 1 минута - красный. Я написал условия на границе с учётом ПРИМЕРОВ. Это важно! Дальше для каждого из интервал периодический закон : например для зелёной зоны : n<t<3+n, где n увеличивается на 5, где T = 5 минут - период. Аналогично для каждой зоны. Чтобы периодичность создать, ввёл цикл( сами подумайте, какой). Замечание: пытаться решить для 60 минут не выйдет, по условию нужно для любого часа это сделать.Поэтому это ещё одна подсказка по поводу цикла.
Dmitry economic security
2 января, 19:14
Главное в этой задаче: вспомнить математику а именно: при делении на 5 - остаток не может быть больше 5 ...и остаток это не то число которое после запятой))) 8 ÷ 5 = 1,6 (6 - это не остаток), 8 ÷ 5 = 1 целых 3 в остатке следовательно используем if и if else: t % 5 < 3 - зеленый t % 5 < 4 - желтый t % 5 < 5 - красный вторые условия (|| или &&) - не нужны
oneDollarGourmet 8 уровень
12 января, 19:41
решение задачи подсмотрел. запомнил и решил. но меня грызет совесть, потому что я не понимаю как она решается. вернее, смотрю на код решенной задачи - вроде все понятно, очевидно. но сам додуматься до решения не могу. например, не понятен момент с делением на 5. для чего делить и почему именно на 5? и почему остаток при делении на 5 не может быть больше 5? а этот момент вообще не понятен Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зелёный сигнал, затем в течение одной минуты - жёлтый, а потом в течение одной минуты - красный, затем опять зелёный горит три минуты и т. д.. помогите
Дмитрий 5 уровень
2 января, 14:53
System.out.println((x %= 5.0) < 3.0 ? "зелёный" : x >= 4.0 ? "красный" : "жёлтый"); Как и пишут, цикл светофора 5 минут, значит неважно сколько минут прошло до нашего цикла (как и количество циклов), важно наш цикл начинается и каждый огонёк горит своё определённое время
Anatoly 8 уровень, Москва
30 декабря 2020, 19:43
Делайте через остаток от деления на 5 . Цикл работы светофора ровно 5 минут. Потом этот остаток сравнивайте с тем что выводить на экран. обязательно на пример для чисел посмотрите а то для 3 минуты я выводил зеленый. в примере желтый😬
Семён Ефименков 7 уровень, Воронеж
21 декабря 2020, 12:26
Задачу переделал, но так и не до конца понял, почему не приняло: for (int i=1;i<13;i++) if (nTime<(i*5)-2 & nTime>=(i-1)*5) System.out.println("зелёный"); else if (nTime<(i*5)-1 & nTime>=(i*5)-2) System.out.println("жёлтый"); else if (nTime<(i*5) & nTime>=(i*5)-1) System.out.println("красный"); Буду благодарен за разъяснения. P. S. "nTime" – введённое число типа double.
Роман 19 уровень
13 декабря 2020, 17:11
Почему для зеленого цвета условие t < 3 ??? В задании написано, что он горит 3 минуты, в моем понимании - сюда входят все 3 минуты, то есть для зеленого должно быть <=3, а для желтого >3 . Я все сделал,но из-за этой формулировки час времени потерял, потому что включал 3 в зеленый цвет, а не в желтый. 🤬
Андрей Глебовский 6 уровень, Санкт-Петербург
29 декабря 2020, 20:53
так... это кажется ответ на мой вопрос, cпс