Показать сообщение отдельно
Старый 12.05.2011, 23:29   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от dima-baris Посмотреть сообщение
зарание спасибо большое!!
Задача: сколько можно купить быков,коров, телят, платя за быка 10 руб.,за корову 5 руб., а за телёнка 0.5 руб, если на 100 рублей надо купить сто голов скота.

её надо решить через цикл repeat!!
Прежде всего, давайте решим задачу безо всякого Паскаля. Обозначим:
1. Ox - искомое число быков,
2. Cow - искомое число коров,
3. Calf - искомое число телят.
Имеем систему уравнений:
10*Ox+5*Cow+0.5*Calf=100
Ox+Cow+Calf=100
Чтобы работать исключительно с целыми числами, умножим обе части первого уравнения на 2:
20*Ox+10*Cow+Calf=200
Исключив телят, получим:
Cow=(100-19*Ox)/9
Вот это Диофантово уравнение (это когда решениями являются только целые числа) и надо решить. Легко убедиться, что единственная подходящая комбинация есть Ox=1 и Cow=9. Отсюда получаем Calf=90. Эти три числа удовлетворяют обоим уравнениям системы.
А теперь - программа, реализующая этот алгоритм:
Код:
var
 Ox,Cow,Calf:Byte;
 b:boolean;
BEGIN
 Ox:=0;
 b:=true;
 Repeat
  Repeat
   Inc(Ox);
  Until (((100-19*Ox) mod 9)=0) or (Ox=5);
  If ((100-19*Ox) mod 9)=0 then
   begin
    Cow:=(100-19*Ox) div 9;
    Calf:=100-(Ox+Cow);
    If (Ox*20+Cow*10+Calf)=200 then
     begin
      b:=false;
      Writeln('  Ox - ',Ox);
      Writeln(' Cow - ',Cow);
      Writeln('Calf - ',Calf);
     end;
   end;
 Until Ox=5;
 If b then WriteLn('The problem is unsolvable!');
 readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070