我在第一篇题解学了约旦高斯消元但是在第一个点WA掉了,下了数据在本地是对的,不开O2是对的,但是开了O2就错,为啥?
正确的输出和本地的输出应该是No Solution,但是开了O2后的错误答案输出0.00
这是输入数据
2
1 1 2
3 3 6
expect No Solution
这是我写的约旦高斯代码
#include <bits/stdc++.h>
using namespace std;
int n;
const int maxn=150;
double gaosi[maxn][maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n+1;j++)
cin>>gaosi[i][j];
}
for(int i=1;i<=n;i++)
{
int maxnum=i;
for(int j=i+1;j<=n;j++)
{
if(fabs(gaosi[j][i])>fabs(gaosi[maxnum][i]))
maxnum=j;
}
for(int j=1;j<=n+1;j++)
{
swap(gaosi[i][j],gaosi[maxnum][j]);
}
if(gaosi[i][i]==0)
{
cout<<"No Solution"<<endl;
return 0;
}
for(int j=1;j<=n;j++)
{
if(j!=i)
{
if(gaosi[i][i]==0)
{
cout<<"No Solution";
return 0;
}
double temp=gaosi[j][i]/gaosi[i][i];
for(int k=i+1;k<=n+1;k++)
{
gaosi[j][k]-=gaosi[i][k]*temp;
}
}
}
}
for(int i=1;i<=n;i++)
if(gaosi[i][i])
printf("%.2lf\n",gaosi[i][n+1]/gaosi[i][i]);
else
{
cout<<"No Solution";
return 0;
}
return 0;
}