1 #include<cstdio>
2 #include<cmath>
3
4 const double EPS=1E-8; //精度问题
5 double B[110][110];
6 int n;
7
8 int main(){
9 scanf("%d",&n);
10 for ( int i=0;i<n;i++){
11 for ( int j=0;j<n;j++)
12 scanf("%lf",&B[i][j]);//读入系数
13 scanf("%lf",&B[i][n]);//读入值
14 }
15 for ( int i=0;i<n;i++){
16 int pivot=i;
17 for ( int j=i;j<n;j++)//选择一个当前位置系数绝对值最大的调换过来,防止误差
18 if (fabs(B[j][i]-B[pivot][i])<=EPS) pivot=j;
19 for ( int j=0;j<=n;j++){//交换操作,要将所有的全部交换过来
20 double t=B[i][j];
21 B[i][j]=B[pivot][j];
22 B[pivot][j]=t;
23 }
24 if (fabs(B[i][i])<=EPS){//如果该位置系数等于零,则0x=a,一定无解
25 printf("No Solution\n");
26 return 0;
27 }
28 for ( int j=i+1;j<=n;j++) B[i][j]/=B[i][i];//将该位的系数变为1
29 for ( int j=0;j<n;j++) //此处看不懂 先死记住
30 if (i!=j)
31 for ( int k=i+1;k<=n;k++) B[j][k]-=B[j][i]*B[i][k];//将其他方程用加减法减去系数值
32 }
33 for ( int i=0;i<n;i++) printf("%.2lf\n",B[i][n]);//最后输出结果。
34 return 0;
35 }