警示后人!!!
查看原帖
警示后人!!!
1081318
WoXitao楼主2024/5/24 09:19

题解可能错误,样例有更新 如以下代码

#include<bits/stdc++.h>
using namespace std;
int n;
double a[1145][1145];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++) cin>>a[i][j];
	}
	
	for(int i=1;i<=n;i++){
		int maxp=i;
#       开始有误
		for(int j=i+1;j<=n;j++){
			if(a[j][i]>a[maxp][i]) maxp=j;
 		}                   
#          这个地方有误 
		if(a[maxp][i]<0.000001&&a[maxp][i]>-0.000001){
			cout<<"No Solution"<<endl;
			return 0;
		}
		for(int j=1;j<=n+1;j++) swap(a[i][j],a[maxp][j]);
		for(int j=n+1;j>=1;j--) a[i][j]=a[i][j]/a[i][i];
		for(int j=1;j<=n;j++){
			if(i!=j){
				double e=a[j][i]/a[i][i];
				for(int k=1;k<=n+1;k++){
					a[j][k]=a[j][k]-a[i][k]*e;
				}
			}
			
		}
	}
	
	for(int i=1;i<=n;i++) printf("%.2f\n",a[i][n+1]);
	return 0;
}

错误 当一列有负数是可能选0 所以这一部分要改成

if(a[maxp][i]==0){
	for(int j=i+1;j<=n;j++){
		if(a[j][i]!=0) maxp=j;
	}
}
for(int j=i+1;j<=n;j++){
	if(a[j][i]>a[maxp][i]&&a[j][i]!=0) maxp=j;
}
2024/5/24 09:19
加载中...