1.普通线性方程组
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
double a[110][110];
const double eps=1e-6;
int n;
int gauss()
{
int c,r;
for(c=0,r=0;c<n;c++)
{
int t=r;
for(int i=r;i<n;i++)
{
if(fabs(a[i][c])>fabs(a[t][c]))
{
t=i;
}
}
if(fabs(a[t][c])<eps) continue;
for(int i=c;i<=n;i++) swap(a[t][i],a[r][i]);
for(int i=n;i>=c;i--)
{
a[r][i]/=a[r][c];
}
for(int i=r+1;i<n;i++)
{
for(int j=n;j>=c;j--)
{
a[i][j]-=a[r][j]*a[i][c];
}
}
r++;
}
if(r<n)
{
for(int i=r;i<n;i++)
{
if(fabs(a[i][n])>eps) return 1;
}
return 0;
}
for(int i=n-1;i>=0;i--)
{
for(int j=i+1;j<n;j++)
{
a[i][n]-=a[j][n]*a[i][j];
}
}
return 2;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
{
scanf("%lf",&a[i][j]);
}
}
int t=gauss();
if(t==1) printf("No solution\n");
else if(t==0)
{
printf("Infinite group solutions\n");
}
else
{
for(int i=0;i<n;i++)
{
printf("%.2lf\n",a[i][n]);
}
}
}
/*
3
1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00
*/
2.异或线性方程组
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[110][110];int n;
int gauss()
{
int r,c;
for(r=0,c=0;c<n;c++)
{
int t=r;
for(int i=t;i<n;i++)
{
if(a[i][c])
{
t=i;
break;
}
}
if(!a[t][c]) continue;
for(int i=c;i<=n;i++) swap(a[r][i],a[t][i]);
for(int i=r+1;i<n;i++)
{
if(!a[i][c]) continue;
for(int j=c;j<=n;j++)
{
a[i][j]^=a[r][j];
}
}
r++;
}
if(r<n)
{
for(int i=r;i<n;i++)
{
if(a[i][n]) return 0;
}
return 1;
}
for(int i=n-1;i>=0;i--)
{
for(int j=i+1;j<n;j++)
{
a[i][n]^=(a[i][j]*a[j][n]);
}
}
return 2;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
{
scanf("%d",&a[i][j]);
}
}
int t=gauss();
if(t==0) printf("No solution\n");
else if(t==1) printf("Multiple sets of solutions\n");
else
{
for(int i=0;i<n;i++)
{
printf("%d\n",a[i][n]);
}
}
}