ZeroJudge A410: 解方程

話說同學們正在學習二元一次方程組。
二元一次方程組的練習題鋪天蓋地地湧向同學們,同學們正苦惱於一次次地四則運算、移項、合併同類項等等。
他們知道你很聰明,想請你幫他們編一個解二元一次方程組的程式。
我們假定二元一次方程組的一般格式如下:(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 0x=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

發佈留言