求助~~
查看原帖
求助~~
113537
Poetic_Rain楼主2020/9/9 19:30
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
int n;
double a[150][150];
int Gauss(){
	int c,r; //c列,r行 
	for(c=1,r=1;c<=n;c++){
		int t=r;
		for(int i=r;i<=n;i++){
			if(fabs(a[i][c])>fabs(a[t][c])) t=i;
		}
		if(fabs(a[t][c])<eps) continue;
		for(int i=c;i<=n+1;i++) swap(a[t][i],a[r][i]);
		for(int i=n+1;i>=c;i--) a[r][i]/=a[r][c];
		for(int i=r+1;i<=n;i++){
			if(fabs(a[i][c])>eps){
				for(int j=n+1;j>=c;j--) a[i][j]-=a[r][j]*a[i][c];
			}
		}
		r++;
	}
	if(r<=n){
		for(int i=r;i<=n;i++){
			if(fabs(a[i][n+1])>eps) return 2;
		}
		return 1;
	}
	for(int i=n;i>=1;i--){	
		for(int j=i+1;j<=n;j++){
			a[i][n+1]-=a[j][n+1]*a[i][j];
		}
	}
	return 0;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++){
			scanf("%lf",&a[i][j]);
		}
	}
	int t=Gauss();
	if(t==0) for(int i=1;i<=n;i++) printf("%.2lf\n",a[i][n+1]);
	else puts("No Solution");
	return 0;
}

以上程序能过这道题

想问一问,为什么当r<=nr<=n时时无解,不应该无解时r<nr<n吗(不太懂这里)

if(r<=n){
		for(int i=r;i<=n;i++){
			if(fabs(a[i][n+1])>eps) return 2;
		}
		return 1;
	}
2020/9/9 19:30
加载中...