在一个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;
}
}
有人可以帮我调试这段代码吗?
答案 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
是故意的吗?