题解奇怪的错误
查看原帖
题解奇怪的错误
856309
oiyang楼主2023/8/30 21:58

我在第一篇题解学了约旦高斯消元但是在第一个点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;
}
2023/8/30 21:58
加载中...