Создание формулы

У меня есть, скажем, переменная X, переменная Y и переменная Z.

If Y = 1 then Z = 0.

Все приведенные ниже примеры относятся к случаю, когда Y строго больше 1.

* If X = 1 and Y >= 2, then Z = 1

* If X = 2 and Y >= 4, then Z = 2
(If X = 2 and Y < 4 , then Z = 1)

* If X = 3 and Y >= 6, then Z = 3
(If X = 3 and Y < 6 but >= 4, then Z = 2)
(If X = 3 and Y < 4 but >= 2, then Z = 1)

* If X = 4 and Y >= 8, then Z = 4
(If X = 4 and Y < 8 but >= 6, then Z = 3)
(If X = 4 and Y < 6 but >= 4, then Z = 2)
(If X = 4 and Y < 4 but >= 2, then Z = 1)

etc etc  ...

Я пытаюсь создать формулу для создания этой переменной Z в зависимости от приведенной выше информации.

Я пробовал делать следующее:

$Z = $X > $Y ? $Y : floor($X / $Y);

Сначала я подумал, что это делает то, что я хочу, но, видимо, нет. Есть идеи, что я делаю не так и как решить эту проблему?

Само по себе это не проблема PHP. Если вы можете математически сформулировать «алгоритм», перевод на PHP будет несложным. Попробуйте сначала найти математическую формулу.

YetiCGN 10.12.2018 16:54

кажется, что Z не зависит от X и равно полу (Y / 2)

splash58 10.12.2018 16:55

@ splash58 не совсем, так как If X = 3 and Y < 4 по вашей формуле результат будет 2, но он должен быть 1.

user10641275 10.12.2018 17:01

3/2 = 1,5 и пол -> 1

splash58 10.12.2018 17:02

Похоже, X - это верхняя граница, которую вы можете протестировать с min().

YetiCGN 10.12.2018 17:03

@ splash58 он не работает в случае If X = 1 and Y = 4, он не дает мне требуемого 1 :) Тот же If X = 2 and Y = 6, он не дает мне 2 ... и т. д.

user10641275 11.12.2018 14:30

@gumakettell так, результат должен быть меньше или равен X?

splash58 11.12.2018 14:54

@ splash58 что ты имеешь в виду? Я написал в своем комментарии, каким должен быть результат.

user10641275 11.12.2018 14:57

мин (X, этаж (Y / 2))?

splash58 11.12.2018 15:19

@ splash58 да, это ответ, который я получил бы, если бы вы его проверили. Так ты с этим согласен?

user10641275 11.12.2018 15:24

Вы не объяснили логику расчета, только показали какой-то пример. С ними работает, но насчет других данных не уверен

splash58 11.12.2018 15:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала нам нужно проанализировать условия и то, что делает каждая переменная.

  • X, по-видимому, обеспечивает верхнюю границу для Z, поэтому Z = min(X, ???)
  • условия предоставляются только для Y >= 2, при этом Z фиксируется как 0, если Y = 1
  • floor(Y / 2) = Z в указанном выше диапазоне

Таким образом, Y и X должны быть не менее 1, а диапазон Z - [0, X].

Собираем все вместе:

if Y < 1 or X < 1:
    some error ???
elif Y == 1
    Z = 0
else
    Z = min(X, floor(Y / 2))

Другие вопросы по теме