Матч
45, Решение уравнения (SolvingEquation)
Рассмотрим уравнение ax + by
+ cz = w, где x, y, z
– неизвестные целые переменные, не меньшие 0. Необходимо найти наименьшее
значение суммы x + y + z
среди всех
решений (x, y,
z) уравнения. Если уравнение решений не
имеет, вернуть -1.
Класс: SolvingEquation
Метод: int
solve(int a, int b, int c, int w)
Ограничения: 1 £ a, b, c, w £ 100.
Вход. Целые числа a, b, c
и w.
Выход. Наименьшее возможное значение суммы x + y + z, где (x, y, z) – решение уравнения. Если уравнение
решений не имеет, вернуть -1.
Пример входа
a |
b |
c |
w |
1 |
2 |
3 |
5 |
1 |
2 |
3 |
10 |
3 |
3 |
5 |
7 |
Пример выхода
2
4
-1
РЕШЕНИЕ
перебор
Перебираем все возможные значения
1 £ i, j, k £ 100,
проверяем выполнение равенства i * a
+ j * b + k * c = w.
Среди всех троек (i, j, k),
для которых имеет место равенство, в переменной res подсчитываем наименьшее значение сумм i + j + k. Если уравнение не имеет ни одного
решения (i, j, k), возвращаем -1.
ПРОГРАММА
#include <stdio.h>
class SolvingEquation
{
public:
int solve(int a, int b, int c, int w)
{
int x, y, z, res = 1000;
for(x = 0; x <= 100; x++)
for(y = 0; y <= 100; y++)
for(z = 0; z <= 100; z++)
if (a*x + b*y + c*z == w)
if
(x + y + z < res) res = x + y + z;
return (res == 1000) ? -1 : res;
}
};