Решение системы уравнений

Задача

Требуется определить, сколько можно преобрести ручек (по цене 10 руб.), карандашей (5 руб.) и ластиков (2 руб.) на 100 рублей. При этом всего предметов должно быть 30.

Решение

Описание переменных: 

Обозначим искомое количество ручек, карандашей и ластиков через переменные ab и cсоответственно.

Цены предметов: pa, pb, pc.

Количество предметов: qty.

Сумма покупки: sum.

Алгоритм решения задачи: 

Составим систему уравнений.
Уравнение суммы покупки: 10*a + 5*b + 2*c = 100
Уравнение количества предметов: a + b + c = 30

Заменим числа соответствующими переменными:
Уравнение суммы покупки: pa*a + pb*b + pc*c = sum
Уравнение количества предметов: a + b + c = qty

Чтобы перебрать все возможные варианты сочетания переменных ab и с, надо использовать три цикла, вложенные друг в друга.
Если при каких-либо значениях ab и c оба уравнения будут истинны, значит эти значения являются решением для системы уравнений.
Система уравнений может иметь несколько решений или не иметь ни одного.

Программа на языке Паскаль:

var
    a, b, c: byte;
    pa, pb, pc: byte;
    qty, sum: byte;
 
begin
    qty := 30;
    sum := 100;
    pa := 10;
    pb := 5;
    pc := 2;
    for a:=0 to (sum div pa) do
        for b:=0 to (sum div pb) do
            for c:=0 to (sum div pc) do
                if (pa*a + pb*b + pc*c = sum) and
                    (a + b + c = qty) then
                        writeln (a:3,b:3,c:3);
 
readln;
end.

Примечания: 

При заданных данных программа выдаст два варианта решения системы уравнений:

2 8 20
5 0 25

Программа может выглядеть немного по-другому. При заданных значениях a и bопределить c можно по формуле qty - a - b. В таком случае код будет выглядеть так:

var
    a, b, c: byte;
    pa, pb, pc: byte;
    qty, sum: byte;
 
begin
    qty := 30;
    sum := 100;
    pa := 10;
    pb := 5;
    pc := 2;
    for a:=0 to (sum div pa) do
        for b:=0 to (sum div pb) do begin
            c:= qty - a - b;
            if (pa*a + pb*b + pc*c = sum) and
                (a + b + c = qty) then
                writeln (a:3,b:3,c:3);
    end;
 
readln;
end.

Тема

Циклы

Уровень

Комбинированные задачи

Теги

Комментарии

У Васи есть две кучи камней. Первая из них содержит x камней, вторая - y. За один раз мальчик может забрать из любой кучки один камень и положить его в другую кучу. Вася хочет сделать так, чтобы хотя бы в одной куче осталось ровно z камней. Составьте алгоритм, который определяет, может ли он достичь поставлен цели, и если да, то какое наименьшее количество переложений ему понадобится для этого.

Ответ на от Гость

Var x,y,z:integer;
Begin
Write('Pervaya kucha: ');
Readln(x);
Write('Vtoraya kucha: ');
Readln(y);
Write('Cel: ');
Readln(z);
 
If z>x+y then
Writeln('Cel nevozmozhno dostignut!')
Else
If (z=x) or (z=y) then
Writeln('Cel uzhe dostignuta!')
Else
If abs(x-z)>abs(y-z) then
Writeln('Dlya dostigenia celi nujno sdelat ',abs(y-z),' perekladivaniy')
Else
Writeln('Dlya dostigenia celi nujno sdelat ',abs(x-z),' perekladivaniy');
 
Readln
End.

Составить программу для решения системы уравнений:

x2-10x-25, x>=4
x, x<1

Добавить комментарий