話說同學們正在學習二元一次方程組。
二元一次方程組的練習題鋪天蓋地地湧向同學們,同學們正苦惱於一次次地四則運算、移項、合併同類項等等。
他們知道你很聰明,想請你幫他們編一個解二元一次方程組的程式。
我們假定二元一次方程組的一般格式如下:(a、b、c、d、e、f 為常數,x、y 為未知數)
ax + by = c
dx + ey = f
程式讀入 a、b、c、d、e、f 後,輸出解。
當然,方程組也有可能存在無解或有無窮解的情況:如果 (x, y) 沒有相對應的實數對滿足方程組則無解;相反,如果 (x, y) 有多組對應的實數對滿足方程組則有無數解。
如果無解,就輸出「No answer」;如果有無窮解,就輸出「Too many」。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入僅1行,包含6個整數 (a、b、c、d、e、f)。輸入資料保證正確。 | 如果有解,那麼第1行輸出「x=」和 x 的值,第2行輸出「y=」和 y 的值,均保留2位小數,請參考範例輸出。 若無解或有無數解則依要求輸出「No answer」或「Too many」。 |
1 1 2 1 -1 0 | x=1.00 y=1.00 |
解題思路
可以使用範例程式碼中的公式來解這個方程式。輸出的部分可以使用 Printf(“%.2f) 來只輸出小數點後兩位。
範例程式碼-ZeroJudge A410: 解方程
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int a1, b1, c1, a2, b2, c2;
scanf("%d%d%d%d%d%d", &a1, &b1, &c1, &a2, &b2, &c2);
int deltax1,deltax2,delta;
float x1, x2;
deltax1=c1*b2-b1*c2;
deltax2=a1*c2-c1*a2;
delta=a1*b2-a2*b1;
if(delta != 0)
{
x1=(float)deltax1/delta;
x2=(float)deltax2/delta;
printf("x=%.2f\n", x1);
printf("y=%.2f\n", x2);
}
else
{
if(deltax1==0 && deltax2==0)
cout<<"Too many"<<endl;
else
cout<<"No answer"<<endl;
}
}
//ZeroJudge A410
//Dr. SeanXD