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

  • 8
  • Недоступна
Допустим, мы точно знаем, что в начале каждого часа на нашем светофоре в течение 3 минут горит зелёный, потом минуту — жёлтый, и ещё минуту — красный свет, а затем всё повторяется. Наша программа должна определить, какой свет горит сейчас («сейчас» — это некое вещественное число, определяющееся временем в минутах, прошедших с начала очередного часа).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (754)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Черных
Уровень 5, Белгород, Россия
5 июля, 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 апреля, 02:06
Я сделал так. Вроде все работает и мое решение приняла программа. Но не уверен что так правильно.
Skifan
Уровень 8, Санкт-Петербург, Россия
18 февраля, 03:18
Задача больше из математики, чем прогерства
Denis Eliseev
Уровень 14, Санкт-Петербург, Россия
17 января, 16:25
Логика такая: наша переменна = (введенное число) вычисляем остаток от деления на 5 если переменная < 3 , то "зеленый" если переменная < 4 , то "желтый" если переменная < 5 , то "красный"
Pavel Mordovin
Уровень 8, Санкт-Петербург, Россия
18 марта, 06:26
Спасибо! Подскажите для дебила. Почему надо вычислить остаток от деления именно на 5? Почему не 4 или 6?:)
Pavel Mordovin
Уровень 8, Санкт-Петербург, Россия
18 марта, 08:59
5 - в течении трёх минут + два раза по одной минуте. 5 - время цикла светофора вот оно что
Sara Kerrigan
Уровень 7, Москва
13 января, 17:10
Не пойму логику... если сказано, что зелёный горит 3 минуты, это получается, что первая минута начинает считаться с 0.0 вторая с 1.0 третья с 2.0 ?
Denis Eliseev
Уровень 14, Санкт-Петербург, Россия
17 января, 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) ?"жёлтый" : "красный");
Влад
Уровень 23, Киев
3 января, 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 марта, 06:27
Почему надо вычислить остаток от деления именно на 5? Если найдётся время, объясните плиз
Pavel Mordovin
Уровень 8, Санкт-Петербург, Россия
18 марта, 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? "жёлтый": "красный");
Влад Ворсин
Уровень 6, Москва, Россия
13 июля 2021, 22:08
Просто 18 попыток, ито с 15 я просто уже зашел в комменты. Вот как надо было самому додуматься, что там надо на 5 делить? Просто жесть
Дмитрий Петров QA Automation Engineer в совкомбанк
25 сентября 2021, 14:21
На 5 делишь чтобы избавиться от полных циклов (зеленый 3 минуты, желтый 1 мин, красный 1 мин), Затем по остатку считаешь сколько прошло времени.
Марина
Уровень 9, Харьков, Украина
20 июня 2021, 18:42
double x = Double.parseDouble(reader.readLine()) % 5; if (x < 3) System.out.println("зелёный"); if (3 <= x && x < 4) System.out.println("жёлтый"); if (4 <= x && x < 5) System.out.println("красный");
Дмитрий Петров QA Automation Engineer в совкомбанк
25 сентября 2021, 14:22
а где try catch, вдруг там строку введут или не введут ничего?
Марина
Уровень 9, Харьков, Украина
28 сентября 2021, 08:18
"вдруг" в условии не прописано, а на этом моменте трай-кетч ещё не учат