Перейти к содержанию
Авторизация  
Incubus

Задача на логику

Рекомендуемые сообщения

В общем, имеется задача, решаю уже 2-ой день, проснулся даже в 6 утра сегодня с решением, но оно не прошло :D 

Может кому самому будет интересно, может кто поможет. Решение прошу не писать, только объяснить как это лучше реализовать, как найти связь между цветами. Была мысль связать их через остаток от деления, но он жутко динамический и поэтому я так и не смог.

Задача:

Цитата

 

Работа светофора для пешеходов запрограммирована следующим образом:
в начале каждого часа в течение трех минут горит зелёный сигнал,
затем в течение одной минуты - жёлтый,
а потом в течение одной минуты - красный,
затем опять зелёный горит три минуты и т. д.
Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа.
Определить, сигнал какого цвета горит для пешеходов в этот момент.
Результат вывести на экран в следующем виде:

"зелёный" - если горит зелёный цвет,
"жёлтый" - если горит жёлтый цвет,
"красный" - если горит красный цвет.

Пример для числа 2.5:
зелёный

Пример для числа 3:
жёлтый

Пример для числа 4:
красный

Пример для числа 5:
зелёный


Требования:
1. Программа должна считывать вещественное число c клавиатуры.
2. Программа должна выводить текст на экран.
3. Если горит зелёный цвет, необходимо вывести текст: "зелёный"
4. Если горит жёлтый цвет, необходимо вывести текст: "жёлтый"
5. Если горит красный цвет, необходимо вывести текст: "красный"

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
<?
$x = 2.5;

$x = $x % 5;

if ($x >= 0 && $x <= 2)
	echo "Green\n";
else if ($x == 3)
	echo "Yellow\n";
else
	echo "Red\n";
?>

набросаный за минуту простейший код на похапе

на нужный язык уж сам переведешь, добавив ввод данных и т.д.

Изменено пользователем Gaikotsu
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 минуты назад, Gaikotsu сказал:

<?
$x = 2.5;

$x = $x % 5;

if ($x >= 0 && $x <= 2)
	echo "Green\n";
else if ($x == 3)
	echo "Yellow\n";
else
	echo "Red\n";
?>

набросаный за минуту простейший код на похапе

на нужный язык уж сам переведешь, добавив ввод данных и т.д.

Что-то тут не так :) Должно выдать зеленый было. Да и я не особо догоняю, зачем нам остаток от деления на 5?

image.png.5983c0a840ca148a6b1e3060bcc84651.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобще результат расчетов в моем коде - это целое число от 0 до 4, т.к. в пхп тут производится неявное приведение типов к целому типу

 

23-04-2018 10-36-13.png

Изменено пользователем Gaikotsu
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
        float numb = 14.01f;
        System.out.println(Math.floor(numb / 5));
        System.out.println(5*Math.floor(numb / 5));
        numb=(float) (numb-(5*Math.floor(numb / 5)));
        System.out.println(numb);
        if(numb >=0 && numb < 3){
            System.out.println("green");
        } else if(numb >= 3 && numb < 4)
            System.out.println("yellow");
        else
            System.out.println("red");
    }
}

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Gaikotsu сказал:

вобще результат расчетов в моем коде - это целое число от 0 до 4, т.к. в пхп тут производится неявное приведение типов к целому типу

 

23-04-2018 10-36-13.png

Ладно, спасибо в любом случае, буду искать, читать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, Demoncool сказал:

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
        float numb = 14.01f;
        System.out.println(Math.floor(numb / 5));
        System.out.println(5*Math.floor(numb / 5));
        numb=(float) (numb-(5*Math.floor(numb / 5)));
        System.out.println(numb);
        if(numb >=0 && numb < 3){
            System.out.println("green");
        } else if(numb >= 3 && numb < 4)
            System.out.println("yellow");
        else
            System.out.println("red");
    }
}

 

Если можно, немного попроще, потому что

 image.png.f7f0744835fe4ec417ca4b49456d1f0a.png

эта часть кода мне вообще не понятна, где-то должен быть метод Math? . Я знаю, что эту задачу можно решить используя обычные условные операторы. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
double t = Double.parseDouble(read.readLine());

if (t % 5 >= 4 & t % 5 < 5) {System.out.println("красный");}
else if (t % 5 >= 3 & t % 5 < 4) {System.out.println("жёлтый");}
else if (t % 5 >= 0 & t % 5 < 3) {System.out.println("зелёный");}
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Incubus сказал:

Если число больше 5, то мы отнимаем количество 5-ок. То есть если у тебя 4, оно остаётся, если у тебя 7, то мы отнимаем 5 (в числе 7,есть одна целая 5ка), если число 12 - отнимаем 10 (в числе 12, две целых 5ки).

Numb=numb +заданное число

Math.floor - наибольшее целое число кратно 5 (то что ты задаешь) (в числе 12 - 2 штуки 5ок)

5 умножаем на матх флур 

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, Solution сказал:

BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
double t = Double.parseDouble(read.readLine());

if (t % 5 >= 4 & t % 5 < 5) {System.out.println("красный");}
else if (t % 5 >= 3 & t % 5 < 4) {System.out.println("жёлтый");}
else if (t % 5 >= 0 & t % 5 < 3) {System.out.println("зелёный");}

Вот такой вариант мне больше понятен, всем спасибо, буду разбираться :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...