一个包含n个方程n个未知数的线性方程组 求解:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
const int N=110;
const double eps=1e-6;
int n;
double a[N][N];
int gauss()
{
int c,r;//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--) //从后往前修改,最后才把第一个数改为1
{
a[r][i]/=a[r][c];
}
for(int i=r+1; i<n; i++)
{
if(fabs(a[i][c])>eps)
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 2;
return 1;
}
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 0;
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
{
for(int j=0; j<n+1; j++)
{
cin>>a[i][j];
}
}
int t=gauss();
if(t==0)
{
for(int i=0; i<n; i++)
{
printf("%.2lf\n",a[i][n]);
}
}
else if(t==1)
{
cout<<"Infinite group solutions"<<endl;
}
else
{
cout<<"No solution"<<endl;
}
return 0;
}