暴力方法(如果有优化再更新):
#include<iostream> using namespace std; const int maxn = 1000; int n; double a[maxn][maxn]; double b[maxn]; void gaussin() { int Flg = -1; //判断方程组是否有解:0无解、1有唯一解、2有无穷解 double fg; for(int i=0;i<n;i++){ //化简 fg=a[i][i]; for(int j=i+1;j<n;j++){ double x=a[j][i]/fg; for(int k=j;k<n;k++) a[j][i]-=x*fg; b[j]-=x*fg; } } bool flag; //判断方程组是否多解 for(int i=n-1;i>=0;i--){ flag = false; for(int j=0;j<n;j++){ if(a[i][j]!=0){ break; } if(j==n-1){ if(b[i] == 0) flag = true; else Flg = 0; //无解情况 } } if(Flg != 0) if(flag) Flg = 2; else Flg = 1; } if(Flg == 0) cout << "方程组无解"<<endl; else if(Flg == 2) cout << "方程组多解" << endl; else{ double s[maxn]; for(int i=n-1;i>=0;i--){ for(int j=n-1;j>=i;j--){ if(j==i) s[i] = b[i]/a[i][j]; else b[i] -= a[i][j]*s[j]; } } cout << "方程组有解:"<<endl; for(int i=0;i<n;i++){ cout << " x"<<i+1<<"="<<s[i]<<endl; } } } int main() { cout << "请输入未知数个数:"; cin>>n; for(int i=0;i<n;i++){ cout << "请输入第"<<i+1<<"方程式的系数和结果:"<<endl; for(int j=0;j<n;j++){ cin>>a[i][j]; } cin>>b[i]; } gaussin(); return 0; }