ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Подскажите алгоритм написания программы
  #1  
Старый 28.11.2008, 11:19
Аватар для zip1990
zip1990
Познающий
Регистрация: 30.09.2008
Сообщений: 68
Провел на форуме:
149520

Репутация: 7
По умолчанию Подскажите алгоритм написания программы

Задачка такая есть 100 рублей корова стоит 5 рублей, бык- 10, теленок - 0.5. надо купить сто голов скота.
 
Ответить с цитированием

  #2  
Старый 28.11.2008, 11:58
Аватар для Dian
Dian
Участник форума
Регистрация: 02.09.2008
Сообщений: 101
Провел на форуме:
196792

Репутация: 37
По умолчанию

"в лоб" - т.е. начать со всех быков, и если голов < 100, то заменять 1 быка на 2 коровы или корову на 10 телят, в зависимости от того, насколько меньше
 
Ответить с цитированием

  #3  
Старый 28.11.2008, 21:56
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

zip1990
PHP код:
<?
for ($y=0;$y<=10;$y++)
for (
$x=0;$x<=20;$x++)
for (
$z=0;$z<=100;$z++)
if (
$x+$y+$z==100 && 5*$x+10*$y+0.5*$z==100) {printf('Коров: %d; Быков: %d; Телят: %d',$x,$y,$z); die();}
?>
Как-то так
 
Ответить с цитированием

  #4  
Старый 28.11.2008, 22:06
Аватар для Solker
Solker
Участник форума
Регистрация: 04.05.2006
Сообщений: 161
Провел на форуме:
389768

Репутация: 158
По умолчанию

А соотношение не важно?
Допустим если 90 процентов скота, будут телятами, я думаю много с такой фермы много не сделаешь.
 
Ответить с цитированием

  #5  
Старый 28.11.2008, 22:09
Аватар для -=lebed=-
-=lebed=-
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
Провел на форуме:
12702287

Репутация: 4738


По умолчанию

Решение:
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 код:
<?
for ($y=1;$y<10;$y++)
    {
        for (
$x=1;$x<20;$x++)
            {
            
$z=(100-5*$x-10*$y)*2;
            if (
$z==round($z) and $z>0) echo "коров:".$x.", быков:".$y.", телят:".$z." проверка:".($x*5+10*$y+0.5*$z)."<br>";
            }
    }
?>
- ну а дальше выбирайте оптимальное

UP: забыл про второе условие: что всего должно быть 100 голов скота, т.е. x+y+z=100 - подправьте код сами вообщем...

Ответ: коров:9, быков:1, телят:90 проверка:100
P.S. Задачка на пересечение двух плоскостей (как известно решение, это прямая, если плоскости не параллельны, не совпадают, а пересекаются). В нашем случае это отрезок, а так как X,Y,Z целые, ненулевые, положительные, то на этой прямой есть лишь одна точка, имеющая все три координаты целые значения, не нулевые, положительные.

Последний раз редактировалось -=lebed=-; 28.11.2008 в 23:39.. Причина: неточность
 
Ответить с цитированием

  #6  
Старый 29.11.2008, 01:11
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

-=lebed=- Ну давайте изгаляться, если все же вспомнить про второе условие - то имеем систему:
Код:
x+y+z=100
10x+5y+0.5z=100
Прямым ходом метода гаусса получаем неоднородную систему с одним свободным членом:
Код:
x+y+z=100
5x-4.5z=-400
Примем за свободный член - количество быков, по нему и будем перебирать:
PHP код:
for ($x=0;$x<=10;$x++)
{
$z=(5*$x+400)/4.5;
$y=100-$x-$z;
if (
$z==round($z) && $z>&& $y>0) {printf('Коров: %d; Быков: %d; Телят: %d',$y,$x,$z); die();}

З.Ы. ваш код, кстати не правильный без второго условия, вы просто находите все точки лежащие на этой плоскости, в первом квадранте и при этом целые
З.Ы.Ы. А прирост скорости в 100 раз однако. У кого нить есть алгоритм как решать уравнения методом гаусса на пхп? ^^

Последний раз редактировалось Gifts; 29.11.2008 в 01:28.. Причина: Ошибочка вышла-с
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
Обзор бесплатных Cms em00s7 PHP, PERL, MySQL, JavaScript 16 03.07.2009 13:13
О законе. _-[A.M.D]HiM@S-_ Статьи 28 01.11.2007 12:25
Программы для работы с железом. Часть I – настройка видеокарт _GaLs_ Аппаратное обеспечение 2 20.12.2006 01:18
Программы для работы с железом. Часть 2 – материнские платы _GaLs_ Аппаратное обеспечение 0 19.11.2006 12:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ