高斯消元模板

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int n;
double a[60][60],ans[60];
int main()
{
 cin>>n;
 for(int i=1;i<=n;i++)
     for(int j=1;j<=n+1;j++)
         cin>>a[i][j];
 int len=1;
 for(int i=1;i<=n;i++)
 {
  int t=len;
  for(int j=len+1;j<=n;j++)
      if(fabs(a[j][i])>fabs(a[t][i]))
          t=j;
  if(fabs(a[t][i])<eps)
  {
   continue;
  }
  if(t!=len)  swap(a[len],a[t]);
  for(int j=1;j<=n;j++)
  {
   if(j==len||!a[j][i])
       continue;
   double c=a[j][i]/a[len][i];
   for(int k=i+1;k<=n+1;k++)
       a[j][k]-=c*a[len][k];
  }
  len++;
    }
 if(len<=n)
    {
        for(int i=len;i<=n;i++)
            if(fabs(a[i][n+1])>eps)
            {
             cout<<-1;
             return 0;//无解
   }
  cout<<0;
  return 0;               //无穷多组解
    }
 int x=1;
 for(int i=1;i<=n;i++)
 {
  if(a[i][n+1]==0)
      printf("x%d=0\n",x);
  else
      printf("x%d=%.2lf\n",x,a[i][n+1]/a[i][i]);
  x++;
 }
}
/*6
1 2 3 4 5 6 10
0 0 1 2 3 4 15
0 0 0 2 6 7 30
0 0 0 0 6 8 10
0 0 0 0 0 1 30
0 0 0 0 0 0 0
*/

posted @ 2021-05-18 15:33  飞。畅  阅读(40)  评论(0)    收藏  举报