ACM_三元一次函數解法(克萊姆法則)


三元一次函數

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

計算三元一次函數。。如圖

Input:

EOF,先輸入n,表示樣例個數,輸入a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3(0=<x,y,z<=1000)

Output:

輸出x,y,z(結果保留兩位小數)

Sample Input:

2
3 3 1 20.00
6 0 2 20.00
6 4 0 20.00
3 0 1 6.00
0 2 2 10.00
1 3 1 10.00

Sample Output:

1.11 3.33 6.67
1.00 2.00 3.00
解題思路:克萊姆法則。
AC代碼:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     double a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3,D,D1,D2,D3;int t;
 5     while(cin>>t){
 6         while(t--){
 7             cin>>a1>>b1>>c1>>d1>>a2>>b2>>c2>>d2>>a3>>b3>>c3>>d3;
 8             D  = a1*(b2*c3 - b3*c2) - a2*(b1*c3 - b3*c1) + a3*(b1*c2 - b2*c1);
 9             D1 = d1*(b2*c3 - b3*c2) - d2*(b1*c3 - b3*c1) + d3*(b1*c2 - b2*c1);
10             D2 = a1*(d2*c3 - d3*c2) - a2*(d1*c3 - d3*c1) + a3*(d1*c2 - d2*c1);
11             D3 = a1*(b2*d3 - b3*d2) - a2*(b1*d3 - b3*d1) + a3*(b1*d2 - b2*d1);
12             printf("%.2f %.2f %.2f\n",D1/D,D2/D,D3/D);
13         }
14     }
15     return 0;
16 }

廢寢忘食的大牛

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

某大牛最近廢寢忘食地打代碼,整天泡網吧(總覺得除了打代碼還干了別的事情?),可就是這么勵志的一個奮斗的大好青年,每次打完比賽都聽不到題解,憤怒啊有木有,悲愴啊有木有,為了報復社會(?),他召喚了(shenmegui)一只還在讀初中的小妹妹出了道題,恰好這小妹妹最近剛學了拋物線(y=ax^2+bx+c),那么問題就來了,挖掘機技術到底哪家強(誤),額,不,是給出三個不重疊的點的坐標,求拋物線的表達式。

Input:

輸入有多組測試數據,每組測試數據包括三個點的坐標,坐標點為整數,x1,y1,x2,y2,x3,y3,(-5000<xi,yi<5000)。

Output:

對於每組測試數據,請分別輸出拋物線表達式的a,b,c值(保留六位小數)。若不構成拋物線,那就輸出SB。因為小妹妹覺得這是道簡單的題目。

Sample Input:

-1 1 0 0 1 1

Sample Output:

a=1.000000,b=0.000000,c=0.000000.
解題思路:克萊姆法則求拋物線的系數。
AC代碼:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 int main(){
 5     LL a1,b1,a2,b2,a3,b3,D,D1,D2,D3;//要用long long,避免數據溢出
 6     while(cin>>a1>>b1>>a2>>b2>>a3>>b3){
 7         D  = a1*a1*(a2-a3) - a2*a2*(a1-a3) + a3*a3*(a1-a2);
 8         D1 = b1*(a2-a3) - b2*(a1-a3) + b3*(a1-a2);
 9         D2 = a1*a1*(b2-b3) - a2*a2*(b1-b3) + a3*a3*(b1-b2);
10         D3 = a1*a1*(a2*b3-a3*b2) - a2*a2*(a1*b3-a3*b1) + a3*a3*(a1*b2-a2*b1);
11         if(!D||!D1)puts("SB");//無解SB 12         else printf("a=%.6f,b=%.6f,c=%.6f.\n",1.0*D1/D,!D2?0.0:(1.0*D2/D),!D3?0.0:(1.0*D3/D));
13     }
14     return 0;
15 }
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM