#15281: 小心測資結尾判斷及小數點問題


2qbingxuan (程式初學者)

School : 臺北市立建國高級中學
ID : 58274
IP address : [114.32.125.176]
Last Login :
2024-04-01 20:23:17
d623. 反方陣 -- leopan0922 | From: [180.217.156.36] | Post Date : 2018-09-26 00:01

/*

本題似乎測資不是以四個零作結束,因此判斷結尾最好和EOF讀檔混用,以免TLE

另外,小數點後必須剛好5位數字,這可以用C style的"%.5f"或C++ style的fixed << setprecisionx來辦到

其實這種題目應該啟用浮點數比對之類的...題幹也未提要如何輸出...目前的測資真的是爛掉的

*/

#include <bits/stdc++.h>

using namespace std;

int main(){
    ios::sync_with_stdio(false);//原先以為TLE原因是頻繁I/O而加上的
    cin.tie(0);
    double a, b, c, d;
    double det;
    while(cin >> a >> b >> c >> d){
        if(a == 0 && b == 0 && c == 0 && d == 0)return 0;
        det = a * d - b * c;
        if(det == 0)cout << "cheat!\n";
        else cout << fixed << setprecision(5) << d / det << ' ' << -b / det << '\n' << -c / det << ' ' << a / det << '\n';
    }
    return 0;
}

 
#35979: Re: 小心測資結尾判斷及小數點問題


ck1090932@gl.ck.tp.edu.tw (ck1090932陳邦仁)

School : 臺北市立建國高級中學
ID : 131859
IP address : [36.224.213.19]
Last Login :
2023-09-28 23:03:53
d623. 反方陣 -- leopan0922 | From: [36.224.208.79] | Post Date : 2023-06-27 23:07

用 python解的話也有這樣的困擾,寫4個0的寫法是行不通的,是小數點後5位都要寫出來,注意EOF,我的寫法:
try:
   while True:
       j=input().split()
       k=input().split() 
       a=float(j[0])
       b=float(j[1])
       c=float(k[0])
       d=float(k[1])
       rev=a*d-b*c
       if a==0 and b==0 and c==0 and d==0:
          end=1
          break
       elif rev==0:
          print('cheat!')
       else:
         a1=d/rev
         b1=-b/rev
         c1=-c/rev
         d1=a/rev
         print('%.5f %.5f' %(a1,b1))
         print('%.5f %.5f' %(c1,d1))
except EOFError:
     pass

 
ZeroJudge Forum