如何在C中找到所有可能的选项?

时间:2015-11-18 09:54:33

标签: c algorithm

我试图在C中找到一个有效的算法,它为我提供了给定方程的所有选项。

我有公式AX + BY = M,其中A,B和M我输入(scanf)。

For example lets have: 5X + 10Y = 45
  • 第一个选项:5 * 9 + 10 * 0
  • 第二个选项:5 * 7 + 10 * 1
  • 第n个选项:5 * 1 + 10 * 4

而且我还需要计算存在多少可能的选项? 一些提示,提示?

我忘了说X和Y在Z和> = 0,所以没有无限的选择。

3 个答案:

答案 0 :(得分:3)

如果你限制为非负的未知数,这个问题就有意义了。

将等式重写为

AX = M - BY.

只要RHS为阳性,即

,就可以有正解
BY ≤ M,

Y ≤ M/B.

然后对于给定的Y,有一个解决方案iff

A|(M - BY)

您可以在Python中将其编码为

for Y in range(M / B + 1):
    if (M - B * Y) % A == 0:
        X= (M - B * Y) / A

解决方案

9 0
7 1
5 2
3 3
1 4

迭代次数等于M / B。如果A > B,最好交换XY

答案 1 :(得分:0)

如果您对输入值设置了一些限制,则可以计算每个解决方案,例如:在TAG POS=1 TYPE=A ATTR=DRAGGABLE:true&&DATA-DRAG-TEXT:{{artist}}&&DATA-URI:spotify:artist:* CONTENT=EVENT:MOUSEOVER EVENT TYPE=MOUSEDOWN SELECTOR={{selArtist}} BUTTON=0 EVENT TYPE=MOUSEUP SELECTOR={{selArtist}} BUTTON=0 X中包含的值中使用Y0。 ..通过这种方式,您可以使用9来计算每个解决方案。

答案 2 :(得分:0)

解决方案的数量是无限的:

  1. 找到第一个解决方案,例如:X=9, Y=0
  2. 您可以使用以下方法创建另一种解决方案:

    X' = X+2*p
    Y' = Y-p
    

    适用于任何p in Z

  3. 这证明您的计划永远不会终止。