Как решить уравнение для 4 переменных - PullRequest
0 голосов
/ 13 октября 2018

Скажите, у меня есть

    a + 3b + 4c +2d =40; 

как я могу решить a, b, c и d.Я не уверен, с чего начать, я кодирую это, используя язык c.Я знаю, что одним из решений является a = 9 b = 3 c = 2 d = 7.

Я забыл добавить, что домен для a, b, c, d составляет 0-29 включительно.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Эта проблема эквивалентна проблеме смены монет - получить сумму с ограниченным числом (здесь не более 29) монет с некоторыми номиналами (здесь 1,2,3,4)

Самый простой способвнести все изменения - это рекурсивная генерация.

 makesum(coinlist, currentsum, resultlist)
      if currensum < 0
           return

      if currensum = 0
           print resultlist

      for coin in coinlist
          makesum(coinlist - coin, currentsum - coinvalue, resultlist + coin)

Для конкретного случая - небольшой фиксированный список номиналов - вы можете просто сделать 4 вложенных цикла

Также существует подход динамического программирования - заполнить таблицу [0..сумма] с возможными комбинациями (для получения всех возможных комбинаций DP не быстрее)

0 голосов
/ 13 октября 2018

Поскольку диапазон действительных чисел мал (0-29), вы можете использовать грубую силу, то есть 4 цикла for, и распечатать все решения:

#include <stdio.h>

int main(void) {
    for (int a=0; a<30; ++a)
        for (int b=0; b<30; ++b)
            for (int c=0; c<30; ++c)
                for (int d=0; d<30; ++d)
                    if (a + 3*b + 4*c + 2*d == 40)
                        printf("Solution: a=%d b=%d c=%d d=%d\n", a, b, c, d);
    return 0;
}

Вывод:

Solution: a=0 b=0 c=0 d=20
Solution: a=0 b=0 c=1 d=18
Solution: a=0 b=0 c=2 d=16
Solution: a=0 b=0 c=3 d=14
Solution: a=0 b=0 c=4 d=12
Solution: a=0 b=0 c=5 d=10
Solution: a=0 b=0 c=6 d=8
Solution: a=0 b=0 c=7 d=6
Solution: a=0 b=0 c=8 d=4
Solution: a=0 b=0 c=9 d=2
Solution: a=0 b=0 c=10 d=0
Solution: a=0 b=2 c=0 d=17
Solution: a=0 b=2 c=1 d=15
Solution: a=0 b=2 c=2 d=13
. . .
<many more solutions>
. . .
0 голосов
/ 13 октября 2018

Существует бесконечное количество решений этого уравнения, поскольку оно представляет плоскость в некотором 4-мерном пространстве, и все точки на этой плоскости являются действительными решениями.

Чтобы иметь уникальное решение, вам нужно как минимум 4 такихразличные уравнения, но тогда еще не гарантируется, что после этого вы получите решение для этих систем уравнений.

...