求助!#8 #9过不去一直80pts
查看原帖
求助!#8 #9过不去一直80pts
166078
Thunder_S楼主2021/7/8 09:51
#include<cmath>
#include<cstdio>
#include<algorithm>
#define N 55
#define eps 1e-19
using namespace std;
int n;
double a[N][N];
bool pd(int i,int j,int x)
{
	if (fabs(fabs(a[j][i])-fabs(a[x][i]))>eps) return fabs(a[j][i])>fabs(a[x][i]);
	for (int k=i+1;k<=n;++k)
		if (fabs(fabs(a[j][k])-fabs(a[x][k]))>eps) return fabs(a[j][k])<fabs(a[x][k]);
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n+1;++j)
			scanf("%lf",&a[i][j]);
	for (int i=1;i<=n;++i)
	{
		int x=i;
		for (int j=i+1;j<=n;++j)
			if (pd(i,j,x)) x=j;
		swap(a[i],a[x]);
		if (a[i][i]==0&&a[i][n+1]!=0)
		{
			printf("-1\n");
			return 0;
		}
		if (a[i][i]==0&&a[i][n+1]==0)
		{
			printf("0\n");
			return 0;
		}
		for (int j=1;j<=n;++j)
		{
			if (j!=i)
			{
				double div=a[j][i]/a[i][i];
				for (int k=i+1;k<=n+1;++k)
					a[j][k]-=a[i][k]*div;
			}
		}
	}
	for (int i=1;i<=n;++i)
	{
		if (a[i][n+1]==0) printf("x%d=0.00\n",i);
		else printf("x%d=%.2lf\n",i,a[i][n+1]/a[i][i]);
	}
	return 0;
}
2021/7/8 09:51
加载中...