这个题我已经过了,但是我的代码测以下样例是 No Solution:
输入:
3
2 0 0 1
1 0 2 1
7 1 0 2
输出:
0.50
-1.50
0.25
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 100 + 10;
int n;
double a[N][N];
bool gauss(int n, int m){//n变量数,m方程数
for(int i=1;i<=n;i++){
int idx = i;
for(int j=i+1;j<=m;j++) if(fabs(a[j][i]) > fabs(a[idx][i])) idx = i;
if(idx != i) for(int j=i;j<=n+1;j++) swap(a[idx][j], a[i][j]);
if(fabs(a[i][i]) < 1e-10) return 0;
for(int k=i+1;k<=m;k++){
for(int j=n+1;j>=i;j--) a[k][j] -= a[k][i] / a[i][i] * a[i][j];
}//把第k行第i个数全部变成 0
}
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++) a[i][n + 1] -= a[i][j] * a[j][n + 1];
a[i][n + 1] /= a[i][i];
}
for(int i=1;i<=n;i++) printf("%.2f\n", a[i][n + 1]);
return 1;
}
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]);
if(!gauss(n, n)) printf("No Solution\n");
return 0;
}