蒟蒻求助高斯消元
查看原帖
蒟蒻求助高斯消元
195331
Mine_KingCattleya楼主2021/1/27 22:02

蒟蒻是用高斯-约旦消元法做的此题,但是除了n=0,m=0的特判以外全都挂掉了,而且都是输出第三个字符读到1,实际0,求大佬帮忙康康/kel

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
double d,a1,an;
double a[65][65];
double _abs(double x){return x<0?-x:x;}
int main()
{
	scanf("%d%d",&n,&m);
	scanf("%lf%lf%lf",&d,&a1,&an);
	if(n==0||m==0){puts("0.000");return 0;}
	a[1][1]=1,a[1][n+1]=a1;
	a[n][n]=an,a[n][n+1]=an;
	for(int i=2;i<n;i++)
	{
		a[i][i-1]=-0.5;
		a[i][i]=1;
		a[i][i+1]=0.5;
		a[i][n+1]=d;
	}
	for(int i=1;i<=n;i++)
	{
		int res=i;
		for(int k=i+1;k<=n;k++)
			if(_abs(a[k][i])>_abs(a[res][i])) k=res;
		for(int j=1;j<=n+1;j++) swap(a[i][j],a[res][j]);
		for(int j=i+1;j<=n+1;j++) a[i][j]/=a[i][i];
		a[i][i]=1;
		for(int k=1;k<=n;k++)
			if(k!=i)
			{
				for(int j=i+1;j<=n+1;j++) a[k][j]-=a[k][i]*a[i][j];
				a[k][i]=0;
			}
	}
	printf("%.3lf\n",a[m][n+1]);
	return 0;
}
2021/1/27 22:02
加载中...