如何求解4个变量的方程式

时间:2018-10-13 04:38:12

标签: c math equation equation-solving

说我有

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

我该如何求解a,b,c和d。 我不确定从哪里开始,我正在使用c语言编写此代码。我知道一种解决方案是a = 9 b = 3 c = 2 d = 7。

我忘记添加a,b,c,d的域为0-29(含0-29)。

4 个答案:

答案 0 :(得分:3)

这个问题等同于硬币找零问题-获得数量有限(此处最大为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..sum](要获得所有可能的组合,DP不会更快)

答案 1 :(得分:1)

该方程有无限解,因为它表示4d空间中的一个平面,并且该平面上的所有点都是有效解。

要拥有独特的解决方案,您至少需要4个这样的不同方程式,但仍不能保证之后您将获得针对这些方程组的解决方案。

答案 2 :(得分:1)

由于有效数字的范围较小(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>
. . .

答案 3 :(得分:-1)

如果您想得到1的答案,则方程式将3乘以y = 3除以3 = 1和y = 1,因此答案是3乘以bt 1 = 3