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

  • 8
  • Недоступна
Допустим, мы точно знаем, что в начале каждого часа на нашем светофоре в течение 3 минут горит зелёный, потом минуту — жёлтый, и ещё минуту — красный свет, а затем всё повторяется. Наша программа должна определить, какой свет горит сейчас («сейчас» — это некое вещественное число, определяющееся временем в минутах, прошедших с начала очередного часа).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (734)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maksym-Andriy
Уровень 5, Львов, Украина
undefined, 20:39
Ещё проще, если кому интересно: Scanner sc = new Scanner(System.in); double t = sc.nextDouble() % 5; System.out.println((t < 3 || t == 5)? "зелёный": t<4? "жёлтый": "красный");
Влад Ворсин
Уровень 7, Москва, Россия
13 июля, 22:08
Просто 18 попыток, ито с 15 я просто уже зашел в комменты. Вот как надо было самому додуматься, что там надо на 5 делить? Просто жесть
Марина
Уровень 9, Харьков, Украина
20 июня, 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("красный");
Кирилл Сырников
Уровень 16, Челябинск, Россия
7 июня, 16:57
Ребята, для тех кто отчаялся:
Double t = Double.parseDouble(reader.readLine());
if (t % 5 < 3) System.out.println("зелёный");
else if (t % 5 < 4) System.out.println("жёлтый");
else if (t % 5 < 5) System.out.println("красный");
Александр
Уровень 4, Москва, Россия
20 мая, 09:42
Эта задачка, меня напрягла. Капец, что будет дальше ))) - жутко интересно.
Ильдар
Уровень 4, Москва
4 мая, 17:37
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); double i = Double.parseDouble(reader.readLine());//напишите тут ваш код for (int a = 0; a <= 55; a += 5) { if (i >= (0.0 + a) && i < (3.0 + a)) { System.out.println("зелёный"); } else if (i >= (3.0 + a) && i < (4.0 + a)) { System.out.println("жёлтый"); } else if (i >= (4.0 + a) && i < (5.0 + a)) { System.out.println("красный"); Подскажите что не так? Ответ правильный выдает
panarik QA Automation Engineer
24 марта, 19:49
всем привет! Поможете понять где я туплю? Вроде сам тестирую по третьему кругу, всё с условием совпадает. Делаю простым циклом:
Scanner scanner = new Scanner(System.in);
        double t = scanner.nextDouble();
        for (int i=0; i<60; i=i+5) {
            if(t>=i && t<i+3) System.out.println("зелёный");
            else if(t>=i && t>=i+3 && t<i+4) System.out.println("жёлтый");
            else if(t>=i && t>=i+4 && t<i+5) System.out.println("красный");
        }
Александр
Уровень 15, Dnepr, Ukraine
1 апреля, 06:37
Попробуй ввести 10 и должен быть - красный, а у тебя зеленый. Граничные значения. В первом if(t>i && t<i+3), а в последнем else if(t>=i && t>=i+4 && t<=i+5)
Александр
Уровень 15, Dnepr, Ukraine
1 апреля, 06:40
Поменяй тип int на double не примет значение 2,5
Александр
Уровень 15, Dnepr, Ukraine
1 апреля, 06:51
В условии менять ничего не нужно - попробуй поменять тип значения
Ердаулет
Уровень 11
8 марта, 12:33
public class Solution { public static void main(String[] args) throws Exception { BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); double time = Double.parseDouble(buff.readLine()); double t = time%5; if (t%5<3.0) { System.out.println("зелёный"); } else if (t%5<4.0) { System.out.println("жёлтый"); } else if (t%5<5.0) { System.out.println("красный"); } } } помогите найти ошибку
Jonnius
Уровень 7, Санкт Петербург, Россия
8 марта, 18:40
if (t%5<3.0) => if (t<3.0) ... зачем 2 раза остаток от деления считаешь?
Ердаулет
Уровень 11
9 марта, 05:04
Вот что значит очень долго решать одну задачу, элементалную вещь не замечал Спасибо!
Сергей
Уровень 9, Киев, Украина
28 февраля, 16:26
Народ, я почитал коменты и варианты решений. У меня маленький вопрос. Никого не смущает, что все, что предложено, на первых пяти минутах теоретически работать не будет так как до пятой минуты весь остаток от деления на пять будет меньше единицы и выпадать будет только зеленый?
Dmitry
Уровень 18, Киев
7 марта, 14:06
проверял свою задачу в IDE... с чего ты взял что выпадает только зелёный?! у меня код вполне работоспособный для любого времени, вплоть до 60. Цвета выдает адекватно и в правильном порядке... (единственное что - задача неверно написана в плане того что нужно учитывать обратный порядок для реальной жизни //зелёный-жёлтый-красный-жёлтый-зелёный// а условие требует только //зелёный-жёлтый-красный)
Сергей
Уровень 9, Киев, Украина
8 марта, 19:21
Возможно. Мне, к сожалению. пришла такая мысль в голову только после окончательной проверки решения, проверить повторно не смог из-за подписки, а в IDE у меня не проверяет, почему, еще не разобрался. Просто по логике программа использует для решения остаток деления на 5. А до значения числа 5 все остатки будут меньше единицы... Возможно вы использовали какое-либо другое решение задачи)))
Dmitry
Уровень 18, Киев
8 марта, 19:27
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("красный");
при этом введи 60 или 43 (да не важно какое) - смысл в том что ты имеешь диапазон работы (для каждого цвета он свой) который равен 5... поэтому какое бы ты число не взял - нужно отталкиваться именно от диапазона
Dmitry
Уровень 18, Киев
8 марта, 19:29
но при всём этом нужно не забывать про то что входящее значение может бить дробным и поэтому time не int
Сергей
Уровень 9, Киев, Украина
9 марта, 05:06
Попробуйте ввести 4 пожалуйста. Если я прав, то в такой программе выпадет зеленый вместо красного.
Dmitry
Уровень 18, Киев
9 марта, 12:13
Dmitry
Уровень 18, Киев
9 марта, 12:18
вся соль в том, что нужно правильно расставить знаки > < =
Сергей
Уровень 9, Киев, Украина
9 марта, 15:44
Да, я, похоже, ошибся) Спасибо за исправление)))
Николай
Уровень 15
29 марта, 21:22
Поставь условие, что нужно делать остаток от деления когда время больше 5 минут. Тогда остаток от деления 6 минут будет 1, а это зеленый и тд.
Denys Kasianov
Уровень 7, Киев, Украина
8 апреля, 17:37
блин а у меня в консоль ничего не выводит, как настроить что бы вывод был? у меня только код 0 выдает, мол все ок. и все :(
Dmitry
Уровень 18, Киев
11 апреля, 11:32
немного выше я выложил полностью робочий код (да я знаю что так нельзя - но у нас с была дискуссия и я показывал ему что всё работает) - сравни со своим и поищи ошибки... если хочеш - скинь сюда свой код почитаем вместе
Азамат
Уровень 12, Санкт-Петербург, Россия
22 апреля, 11:04
Отличная реализация. Для уменьшения строчек кода могу посоветовать заменить строчки 13 и 14 следующей конструкцией: double t = Double.parseDouble(bufferedReader.readLine()); Так же можно избавиться от условия для, например, красного. Ведь если ни одни из двух цветов, то точно третий.
Dmitry
Уровень 18, Киев
23 февраля, 19:59
Сложная задача в плане того что нужно правильно учесть периодичность сигналов и правильно росставить знаки для каждого цвета иначе для 14 минуты можно получить оба цвета... если кому поможет, то идея решения заключается в: if (time%5>=0 && time%5<3)