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

  • 8
  • Недоступна
Допустим, мы точно знаем, что в начале каждого часа на нашем светофоре в течение 3 минут горит зелёный, потом минуту — жёлтый, и ещё минуту — красный свет, а затем всё повторяется. Наша программа должна определить, какой свет горит сейчас («сейчас» — это некое вещественное число, определяющееся временем в минутах, прошедших с начала очередного часа).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (756)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Oleg
Уровень 6
16 ноября 2022, 05:26
Вот настоящее извращение)) Сделал так. По факту при компиляции все работает правильно, и ввод и цвет на выходе. Ошибок нет. Вопрос почему Javarush не принимает такое решение? Кто подскажет?))) BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String input = reader.readLine(); Double in = Double.parseDouble(input); //int in = Integer.parseInt(input); if (in >= 3 & in < 4 | in >= 8 & in < 9 | in >= 13 & in < 14 | in >= 18 & in < 19 | in >= 23 & in < 24 | in >= 28 & in < 29 | in >= 33 & in < 34 | in >= 38 & in < 39 | in >= 43 & in < 44 | in >= 48 & in < 49 | in >= 53 & in < 54 | in >= 58 & in < 59 ){ System.out.println("жёлтый"); } if (in >= 4 & in < 5 | in >= 9 & in < 10 | in >= 14 & in < 15 | in >= 19 & in < 20 | in >= 24 & in < 25 | in >= 29 & in < 30 | in >= 34 & in < 35 | in >= 39 & in < 40 | in >= 44 & in < 45 | in >= 49 & in < 50 | in >= 54 & in < 55 | in >= 59 & in < 60 ){ System.out.println("красный"); }if (in >= 0 & in < 3 | in >= 5 & in < 8| in >= 10 & in < 13 | in >= 15 & in < 18 | in >= 20 & in < 23 | in >= 25 & in < 28 | in >= 30 & in < 33 | in
Retr0
Уровень 12
1 декабря 2022, 13:16
тут походу принимает только тот код, когда есть остаток на деление
Игорь Черных
Уровень 8
5 июля 2022, 02:41
Светофор Как же много времени я убил на то, чтобы понять с какого * при делении на 5, мы получаем числа в диапазоне от 0 до 5...Разверну: Выражение: time = time % 5; при 58 минутах для меня имело значение 11.6...соответственно 11 циклов и "десятичный остаток от деления" 6. Эмпирическим путем выяснил, что "% 5" работает не так. Берем 58 минут и делим на 5, целой частью здесь будет завершенное кол-во циклов - 11, остатком же то, что не поделилось, т.е. 58-55 = 3...В общем и целом, 3/5 не надо превращать в 0.6
John Black
Уровень 6
9 апреля 2022, 02:06
Я сделал так. Вроде все работает и мое решение приняла программа. Но не уверен что так правильно.
Skifan
Уровень 12
18 февраля 2022, 03:18
Задача больше из математики, чем прогерства
Denis Eliseev
Уровень 14
17 января 2022, 16:25
Логика такая: наша переменна = (введенное число) вычисляем остаток от деления на 5 если переменная < 3 , то "зеленый" если переменная < 4 , то "желтый" если переменная < 5 , то "красный"
Pavel Mordovin
Уровень 8
18 марта 2022, 06:26
Спасибо! Подскажите для дебила. Почему надо вычислить остаток от деления именно на 5? Почему не 4 или 6?:)
Pavel Mordovin
Уровень 8
18 марта 2022, 08:59
5 - в течении трёх минут + два раза по одной минуте. 5 - время цикла светофора вот оно что
Sara Kerrigan
Уровень 7
13 января 2022, 17:10
Не пойму логику... если сказано, что зелёный горит 3 минуты, это получается, что первая минута начинает считаться с 0.0 вторая с 1.0 третья с 2.0 ?
Denis Eliseev
Уровень 14
17 января 2022, 16:26
да, первая с 0 до 1, вторая с 1 до 2, третья с 2 до 3, и т д
Elidriel
Уровень 35
21 ноября 2021, 17:06
Извращение, но тоже пойдет :)
double t = Double.parseDouble(reader.readLine());
while(t >= 5){
t -= 5;
}
System.out.println((t >= 0 && t < 3) ? "зелёный" : (t >= 3 && t < 4) ?"жёлтый" : "красный");
Влад
Уровень 41
3 января 2022, 13:15
Хороший подход
Vitevii
Уровень 5
27 октября 2021, 09:12
Не пойму допустим t введут с клавиатуры 37.5 по идее должен быть зеленый, но если по решению посчитать получается 32.5/5 = 7.5 ни целое ни остаток ни как не меньше 3 или я чего-то не понимаю?
double time = Double.parseDouble(reader.readLine());

  if (time % 5 >= 0 && time % 5 < 3) {
      System.out.println("зелёный");
  } else if (time % 5 < 4 && time % 5 >= 3) {
      System.out.println("жёлтый");
  } else if (time % 5 < 5 && time % 5 >= 4) {
      System.out.println("красный");
Pavel Mordovin
Уровень 8
18 марта 2022, 06:27
Почему надо вычислить остаток от деления именно на 5? Если найдётся время, объясните плиз
Pavel Mordovin
Уровень 8
18 марта 2022, 07:24
два раза по одной минуте и один раз три минуты, вот и 5. Всем спасибо!
Maksym-Andriy
Уровень 14
19 сентября 2021, 20:39
Ещё проще, если кому интересно: Scanner sc = new Scanner(System.in); double t = sc.nextDouble() % 5; System.out.println((t < 3 || t == 5)? "зелёный": t<4? "жёлтый": "красный");
Влад Ворсин
Уровень 17
13 июля 2021, 22:08
Просто 18 попыток, ито с 15 я просто уже зашел в комменты. Вот как надо было самому додуматься, что там надо на 5 делить? Просто жесть
Дмитрий Петров QA Automation Engineer в совкомбанк
25 сентября 2021, 14:21
На 5 делишь чтобы избавиться от полных циклов (зеленый 3 минуты, желтый 1 мин, красный 1 мин), Затем по остатку считаешь сколько прошло времени.