2024年1月24日15点49分

正在完成高斯消元板子题

ALL # WA

翻出董晓逐行比对

一眼丁真

遂发现判断无解时括号打歪了

if(fabs(a[i][i]<eps))

蒸乌鱼

解决此问题耗时20min

以上,警示后人

附WA代码

#include<bits/stdc++.h>
using namespace std;

const double eps = 0.000001;
const int N = 105;

double a[N][N];
int n;

bool GaussJordan()
{
	for(int i=1;i<=n;i++)
	{
		int r=i;
		for(int k=i;k<=n;k++) if(fabs(a[k][i])>eps) {r=k;break;}
		if(r!=i) swap(a[r],a[i]);
		if(fabs(a[i][i]<eps)) return 0;//事故多发地段

		for(int k=1;k<=n;k++)
		{
			if(k==i) continue;
			double t=a[k][i]/a[i][i];
			for(int j=i;j<=n+1;j++) a[k][j]-=t*a[i][j];
		}
	}
	for(int i=1;i<=n;i++) a[i][n+1]/=a[i][i];
	return 1;
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n+1;j++)
		{
			cin>>a[i][j];
		}
	}
	if(GaussJordan())
	{
		for(int i=1;i<=n;i++)
		{
			printf("%.2lf\n",a[i][n+1]);
		}
	}
	else 
	{
		cout<<"No Solution";
	}
	return 0;
}