【发布时间】: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
#include。 Thatusing. -
您是否尝试过单步执行一个错误示例输入的代码,看看哪里出错了?您可以使用调试器来执行此操作,也可以在进行计算的任何地方插入打印语句,或者使用笔和纸。
-
detx/det1可以产生实数(浮点数)。你的结果是整数。 -
@CulverKwan:你需要想出一个失败的例子。也许您可以编写一个测试函数,给定代码计算的
x和y值,检查它们是否真的为一系列值的两个方程产生等式。 -
#include<bits/stdc++.h>是假经济。每次构建时编译整个标准库所需的时间相差一个数量级,从而节省了键入时间。如果你的程序第一次运行,每次你可能会赢,但在两三次重建之后你就输了。此外,它会将您的代码变成您未使用的标识符的雷区。结合 using namespace std;将所有这些标识符拉入std命名空间,在那里它很容易与您的代码发生冲突,并且危险级别越来越高。
标签: c++