80分,高斯消元,无解无数解无法判断!!
查看原帖
80分,高斯消元,无解无数解无法判断!!
658303
ouliang楼主2024/3/7 21:52
#include<bits/stdc++.h>
using namespace std;
int n,m;
double cl[200][200],ans[200],bl;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	  for(int j=1;j<n+2;j++)
	    scanf("%lf",&cl[i][j]);
	for(int i=1;i<=n;i++)
	{
		m=i;
		for(int j=i+1;j<=n;j++)
		  if(fabs(cl[i][i])<fabs(cl[j][i]))
		    m=j;
		if(fabs(cl[m][i])<1e-9)
		  continue;
		if(i!=m)
		  swap(cl[i],cl[m]);
		bl=cl[i][i];
		for(int j=i;j<n+2;j++)
		  cl[i][j]/=bl;
		for(int j=i+1;j<=n;j++)
		{
			bl=cl[j][i];
			for(int k=i;k<n+2;k++)
			  cl[j][k]-=cl[i][k]*bl;
		}
	}
	ans[n]=cl[n][n+1];
	for(int i=n-1;i>0;i--)
	{
		ans[i]=cl[i][n+1];
		for(int j=i+1;j<=n;j++)
		  ans[i]-=ans[j]*cl[i][j];
	}
	for(int i=1;i<=n;i++)
	  if(fabs(cl[i][i])<1e-13)
	  {
	  	if(fabs(cl[i][n+1])<1e-9)
	  	  printf("0");
	  	else
	  	  printf("-1");
	  	return 0;
	  }
	for(int i=1;i<=n;i++)
	  printf("x%d=%.2lf\n",i,ans[i]);
	return 0;
}

2024/3/7 21:52
加载中...