1 solutions
-
1
#include<bits/stdc++.h> using namespace std; const double eps=0.000000001; double jz[100][100]; int n; bool check0(double x){return fabs(x-0)<eps;} void dbg(){ for (int i=1;i<=n;i++){for (int j=1;j<=n+1;j++)cout << jz[i][j] << " ";cout << "\n";} cout << "\n"; } signed main(){ cin >> n; for (int i=1;i<=n;i++)for (int j=1;j<=n+1;j++)cin >> jz[i][j]; int rk=0,i=1; for (int t=1;t<=n;t++){ //依次消xt //通过交换找到系数不为0的xi int j=i; while(j<=n&&check0(jz[j][t]))j++; if (j>n)continue; //没有该主元直接跳过 swap(jz[i],jz[j]); //化1 double tmp=jz[i][t]; for (int j=1;j<=n+1;j++){ jz[i][j]/=tmp; } //dbg(); //消掉别的行 for (int j=1;j<=n;j++){ //被消xt的是第j行 if (j==i)continue; double tmp=-jz[j][t]; for (int k=1;k<=n+1;k++){ //当前处理第j行的xk jz[j][k]+=jz[i][k]*tmp; } } rk++; i++; //dbg(); } //判断解的情况 //先判断无解 for (int i=1;i<=n;i++){ bool ff=0; for (int j=1;j<=n;j++)if (!check0(jz[i][j]))ff=1; if (!ff){ if (!check0(jz[i][n+1])){ cout << -1; return 0; } } } //是否存在无穷解 if (rk<n){ cout << 0; return 0; } for (int i=1;i<=n;i++){ printf("x%d=%.2lf\n",i,jz[i][n+1]); } return 0; }
- 1
Information
- ID
- 432
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 10
- Tags
- # Submissions
- 71
- Accepted
- 2
- Uploaded By