RE#3#8,WA#9 求助
查看原帖
RE#3#8,WA#9 求助
365532
Mr_ll楼主2022/7/20 20:18
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=50+5;
const double esp=1e-8;

int n;
int b[N],c;
double a[N][N];

void Gauss()
{
	int h=1;
	for(int i=1;i<=n;i++)
	{
		int maxx=h;
		for(int j=h+1;j<=n;j++)
		{
			if(a[maxx][i]<a[j][i])
			{
				maxx=j;
			}
		} 
		
		if(fabs(a[maxx][i])<esp) continue;
		
		for(int j=1;j<=n+1;j++)
		{
			swap(a[maxx][j],a[h][j]);
		}
		
		for(int j=1;j<=n+1;j++)
		{
			if(i==j) continue;
			
			double d=a[j][i]/a[h][i];
			
			for(int k=i+1;k<=n+1;k++)
			{
				a[j][k]-=d*a[h][k];
			}
		}
		h++;
	}
	
	h--;
	if(h<n)
	{
		for(int i=h+1;i<=n;i++)
		{
			if(fabs(a[i][n+1])<esp)
			{
				puts("-1");
				return;
			}
		}
		puts("0");
		return;
	}
	
	for(int i=1;i<=n;i++)
	{
		printf("x%d=%.2lf\n",i,a[i][n+1]/a[i][i]);
	}
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&b[1]);
		c=b[1];
		
		for(int j=2;j<=n+1;j++)
		{
			scanf("%d",&b[j]);
			c=__gcd(c,b[j]);
		}
		
		c=abs(c);
		
		for(int j=1;j<=n+1;j++)
		{
			a[i][j]=(double)(b[j]/c);
		}
	}
	
	Gauss();
	return 0;
}
2022/7/20 20:18
加载中...