社区讨论

警示后人!!!

P3389【模板】高斯消元法参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lwjzw8hj
此快照首次捕获于
2024/05/24 09:20
2 年前
此快照最后确认于
2024/05/24 15:45
2 年前
查看原帖
题解可能错误,样例有更新 如以下代码
CPP
#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 所以这一部分要改成
CPP
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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...