1

我正在尝试解决ax + by = n

当我输入 n = 7 时,它正确地求解方程为 X = 2 和 Y = 1。但是当我输入 n = 1 时,它不能求解方程。即使这个方程有有效的整数解,X = 17,Y = -11。这是我的完整程序。

#include <iostream>
using namespace std;

void PrintXY(int a, int b, int n)
{
    for (int i = 0; i * a <= n; i++) {

        if ((n - (i * a)) % b == 0) {
            cout << "x = " << i << ", y = "
                << (n - (i * a)) / b;
            return;
        }
    }

    cout << "No solution";
}

int main()
{
    int a = 2, b = 3, n = 1;
    PrintXY(a, b, n);
    return 0;
}

n = 7 时的输出:

x = 2, y = 1

n = 1 时的输出:

没有解决方案

推理。2*(2) + 3*(1) - 7 = 4 + 3 - 7 = 0

2*(17) + 3*(-11) - 1 = 34 - 33 - 1 = 0

两个方程都求解为 0。但是我的程序中有什么问题导致它给出“无解”。

4

1 回答 1

2

问题在于终止条件:

i*a<=n

this(n>=a*i) 不必为真,在解的情况下尤其不为真(即 X=17,Y=-11)。这似乎是合理的 - 在答案(X 或 Y)没有任何界限(限制)的情况下,您将如何在闭环 for 循环中找到线性方程(具有无限可能范围)的解?

于 2022-01-20T17:57:00.443 回答