蒟蒻是用高斯-约旦消元法做的此题,但是除了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;
}