带有两个未知数的线性方程的调试代码

时间:2021-01-16 05:06:12

标签: c++

在一个judge平台上,我遇到了这个问题,18题有3题答错了:

在联立方程中

ax+by=c

dc+ey=f

x 和 y 是未知数。系数 a、b、c、d、e 和 f 是整数。每个系数的范围从-2000到2000。

编写一个程序来读入系数并求解相应联立方程的未知数。

输入

第一行也是唯一一行包含六个整数 a、b、c、d、e 和 f,以空格分隔。

输出

如果只有一个解,第一行也是唯一的一行包含两个数字 x 和 y,用空格隔开,这样当它们代入原始方程时,联立方程组成立。如果联立方程组无解,则显示no solution。如果联立方程组有多个解,则显示 many solutions。 假设 x 和 y 总是整数。

所以,这是我的代码:

#include<bits/stdc++.h>
using namespace std;
int det(int a,int b,int c,int d){
    return a*d-b*c;
}
int main(){
    int a,b,c,d,e,f,det1,detx,dety;
    cin >> a >> b >> c >> d >> e >> f;
    det1=det(a,b,d,e);
    detx=det(c,b,f,e);
    dety=det(a,c,d,f);
    if(det1==0){
        if(detx==0){
            cout << "many solutions";
        }
        else{
            cout << "no solution";
        }
    }
    else{
        cout << detx/det1 << ' ' << dety/det1;
    }
}

有人可以帮我调试这段代码吗?

1 个答案:

答案 0 :(得分:2)

我最大的猜测是我不明白这个问题。具有 2 个未知数的线性方程组看起来通常是不同的。

如果这确实是问题,那么我们可以执行以下操作:

ax+by=c
dc+ey=f

ey = f-dc
y=(f-dc)/e

ax = c-by
   = c-b((f-dc)/e)
   = c-b(f-dc)/e
   = c-(bf+bcd)/e
   = c-bf/e+bcd/e
 
x = c/a-bf/(ae)+bcd/(ae)
  = c/a-bf/a/e+bcd/a/e

因此,除了“e”或“a”为 0 外,总有一个确定性解决方案。

这太琐碎了,我几乎被说服我不明白这个问题。

即使有 a<->dc b<->e 的线性依赖,也不会改变。马拜

ax+by=c
dx+ey=f

是故意的吗?