【问题标题】:Debugging code for linear equations with two unknowns具有两个未知数的线性方程的调试代码
【发布时间】:2021-01-16 05:06:12
【问题描述】:

在一个评委平台上,我遇到了这个问题,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;
    }
}

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

【问题讨论】:

  • 无论你做什么,永远不要使用“竞争”或“评判”网站作为学习编程的一种方式。你从这些网站真正学到的只是真正的坏习惯。您在向我们展示的代码中展示了其中的一些。例如,单字母变量的名称没有重要意义,也没有解释它们的作用。没有关于代码在做什么或为什么。 That #includeThat using.
  • 您是否尝试过单步执行一个错误示例输入的代码,看看哪里出错了?您可以使用调试器来执行此操作,也可以在进行计算的任何地方插入打印语句,或者使用笔和纸。
  • detx/det1 可以产生实数(浮点数)。你的结果是整数。
  • @CulverKwan:你需要想出一个失败的例子。也许您可以编写一个测试函数,给定代码计算的xy 值,检查它们是否真的为一系列值的两个方程产生等式。
  • #include&lt;bits/stdc++.h&gt; 是假经济。每次构建时编译整个标准库所需的时间相差一个数量级,从而节省了键入时间。如果你的程序第一次运行,每次你可能会赢,但在两三次重建之后你就输了。此外,它会将您的代码变成您未使用的标识符的雷区。结合 using namespace std; 将所有这些标识符拉入 std 命名空间,在那里它很容易与您的代码发生冲突,并且危险级别越来越高。

标签: c++


【解决方案1】:

我的猜测是我不明白这个问题。具有 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 外,总是有一个确定性解决方案。

这太微不足道了,我几乎相信我不明白这个问题。

即使具有 adc be 的线性依赖关系,也不会发生任何变化。马拜

ax+by=c
dx+ey=f

是故意的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多