![]() |
Подскажите алгоритм написания программы
Задачка такая есть 100 рублей корова стоит 5 рублей, бык- 10, теленок - 0.5. надо купить сто голов скота.
|
"в лоб" - т.е. начать со всех быков, и если голов < 100, то заменять 1 быка на 2 коровы или корову на 10 телят, в зависимости от того, насколько меньше
|
zip1990
PHP код:
|
А соотношение не важно?
Допустим если 90 процентов скота, будут телятами, я думаю много с такой фермы много не сделаешь. |
Решение:
5х+10y+0.5z=100, где x,y,z - целые и не отрицательные>0 (натуральные вроде, уже не помню...) Это плоскость - алгебраическая поверхность первого порядка: в декартовой системе координат плоскость может быть задана уравнением первой степени. Соответсвенно все решения - точки с целыми координатами, принадлежащие этой плоскости. Частное решение: Берём X=10 Тогда 10y+0.5z=50 z=(50-10y)*2 z=100-20y Берём y=1, тогда z=80 Итого: 10 коров, 1 бык, 80 телят. (одного быка хватит на 10 коров? ;) ) проверка: 5*10+10*1+80*0.5=50+10+40=100 Так как цена быка самая большая, то перебор всех частных решений начинаем подставляя Y=1,2,3 и т.д. потом перебираем X=1,2,3 и т.д (при каждом y) находя Z (z должно получатся целым, неотрицательным>0, остальные решения отбрасываем). Думаю алгоритм ясен. Готовый рабочий код, выдающий все возм. решения: PHP код:
UP: забыл про второе условие: что всего должно быть 100 голов скота, т.е. x+y+z=100 - подправьте код сами вообщем... ;) Ответ: коров:9, быков:1, телят:90 проверка:100 P.S. Задачка на пересечение двух плоскостей (как известно решение, это прямая, если плоскости не параллельны, не совпадают, а пересекаются). В нашем случае это отрезок, а так как X,Y,Z целые, ненулевые, положительные, то на этой прямой есть лишь одна точка, имеющая все три координаты целые значения, не нулевые, положительные. |
-=lebed=- Ну давайте изгаляться, если все же вспомнить про второе условие - то имеем систему:
Код:
x+y+z=100Код:
x+y+z=100PHP код:
З.Ы.Ы. А прирост скорости в 100 раз однако. У кого нить есть алгоритм как решать уравнения методом гаусса на пхп? ^^ |
| Время: 10:58 |