1 //高斯消元法(普通方程)
2
3 const int N=110;
4 const double eps=1e-7;
5 int n;
6 double a[N][N];
7
8 int gauss(){
9 int r,c;
10 for(c=0,r=0;c<n;c++){//枚举列
11 int t=r;
12 for(int i=r;i<n;i++)
13 if(fabs(a[i][c])>fabs(a[t][c])) t=i;//找当前这一列系数绝对值最大的一行
14 if(fabs(a[t][c]<eps)) continue;//没找到
15 for(int i=c;i<n+1;i++) swap(a[t][i],a[r][i]);//交换行
16 for(int i=n;i>=c;i--) a[r][i]/=a[r][c];//从后往前
17
18 for(int i=r+1;i<n;i++)//r+1行开始
19 if(fabs(a[i][c])>eps)
20 for(int j=n;j>=c;j--)
21 a[i][j]-=a[r][j]*a[i][c];
22 r++;
23 }
24 if(r<n){
25 for(int i=r;i<n;i++)
26 if(fabs(a[i][n])>eps) return 2;//无解
27 return 1;//无穷组解
28 }
29 for(int i=n-1;i>=0;i--)
30 for(int j=i+1;j<n;j++)
31 a[i][n]-=a[j][n]*a[i][j];
32 return 0;//唯一解
33 }
1 //高斯消元解线性异或方程
2
3 #include<bits/stdc++.h>
4 using namespace std;
5 int n,a[120][120];
6 int gauss(){
7 int r,c;
8 for(r=0,c=0;c<n;c++){//枚举列
9 int t=r;
10 for(int i=r;i<n;i++)
11 if(a[i][c]){t=i;break;}//找到一个非0数
12 if(!a[t][c]) continue;//没找到,则continue
13 for(int i=c;i<=n;i++) swap(a[t][i],a[r][i]);//交换两行
14 for(int i=r+1;i<n;i++)//从r+1行开始消0
15 if(a[i][c])//这个数不为0则异或
16 for(int j=c;j<=n;j++)
17 a[i][j]^=a[r][j];
18 r++;//枚举行
19 }
20 //判断是否有解
21 if(r<n){
22 for(int i=r;i<n;i++)
23 if(a[i][n]) return 2;//无解
24 return 1;//有无穷组解
25 }
26 for(int i=n-1;i>=0;i--)
27 for(int j=i+1;j<n;j++)//把每行后面的系数都消掉
28 a[i][n]^=a[i][j]&a[j][n];//只有1的时候才异或,用&运算
29 return 0;//唯一解
30 }
31
32 int main(){
33 scanf("%d",&n);
34 for(int i=0;i<n;i++)
35 for(int j=0;j<n+1;j++) scnaf("%d",a[i][j]);
36 int res=gauss();
37 if(res==0){
38 for(int i=0;i<n;i++) cout<<a[i][n]<<endl;
39 }
40 else if(res==1) puts("Multiple sets of solutions");
41 else puts("No solution");
42 }
//Gauss-Jordan消元法
//洛谷P3389
#include<bits/stdc++.h>
using namespace std;
double a[105][105];
double eps=1e-7;
int main(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++) scanf("%lf",&a[i][j]);
for(int i=1;i<=n;i++){
int max=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a[max][i])) max=j;
for(int j=1;j<=n+1;j++) swap(a[i][j],a[max][j]);
if(a[i][i]<eps){
puts("No Solution");
return 0;
}
for(int j=n+1;j>=1;j--) a[i][j]=a[i][j]/a[i][i];
for(int j=1;j<=n;j++){
if(j!=i){
double temp=a[j][i]/a[i][i];
for(int k=1;k<=n+1;k++) a[j][k]-=a[i][k]*temp;
}
}
}
for(int i=1;i<=n;i++) printf("%0.2f\n",a[i][n+1]);
}