#include <iostream> #include <cstring> #include <vector> #include <cmath> #include <cstdio> using namespace std; const int size_n=100; const double exps=1e-7; double a[size_n][size_n],b[size_n],ans[size_n]; void get_ans(int n){ for(int i=n;i>=1;--i){ double sum=0; for(int j=n;j>i;--j){ sum+=ans[j]*a[i][j]; } ans[i]=(b[i]-sum)/a[i][i]; } } void fun(int n){ for(int i=1;i<=n;++i){ int max_n=i; for(int j=i+1;j<=n;++j) if(fabs(a[j][i])>fabs(a[max_n][i])) max_n=j; if(max_n!=i){ for(int j=1;j<=n;++j){ swap(a[max_n][j],a[i][j]); } swap(b[max_n],b[i]); } if(fabs(a[i][i])<exps){ cout<<"无穷多解"<<endl; return; } for(int j=i+1;j<=n;++j){ double tem=a[j][i]/a[i][i]; for(int k=1;k<=n;++k){ a[j][k]-=a[i][k]*tem; } b[j]-=b[i]*tem; } } get_ans(n); } int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int n; cin>>n; for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ cin>>a[i][j]; } } for(int i=1;i<=n;++i) cin>>b[i]; fun(n); for(int i=1;i<=n;++i) printf("%.2f\n",ans[i]); return 0; }
原文:http://blog.csdn.net/fangpinlei/article/details/44559105