#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<=n时时无解,不应该无解时r<n吗(不太懂这里)
if(r<=n){
for(int i=r;i<=n;i++){
if(fabs(a[i][n+1])>eps) return 2;
}
return 1;
}