#include<bits/stdc++.h>
using namespace std;
const int N =110;
const double eps=1e-6;
double a[N][N];
int n;
int gauss()
{
int c,r;//col row
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; //最大数为0,那么其他数都为零
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];//把r行第c列的数换成1
for(int i=r+1;i<n;i++)
if(fabs(a[i][c])>eps)//其他行c列都化成0
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)//不为零 有0!=0情况
return 2;//无解
}
return 1;//就存在0=0 无穷解
}
for(int i=n-1;i>=0;i--)
for(int j=i+1;j<n;j++)//消除i+1位到n-1位
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;j++)
{
cin>>a[i][j];
}
int ans=gauss();
if(ans==1) cout<<"Infinite group solutions";
else if(ans==2) cout<<"No solution";
else for(int i=0;i<n;i++)
printf("%.2lf\n",a[i][n]);
}
08-26
778
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-29
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交