1 solutions

  • 1
    @ 2026-2-6 11:27:29
    #include<bits/stdc++.h>
    using namespace std;
    
    const double eps=0.000000001;
    
    double jz[100][100];
    int n;
    
    bool check0(double x){return fabs(x-0)<eps;}
    
    void dbg(){
        for (int i=1;i<=n;i++){for (int j=1;j<=n+1;j++)cout << jz[i][j] << " ";cout << "\n";}
        cout << "\n";
    }
    
    signed main(){
        cin >> n;
        for (int i=1;i<=n;i++)for (int j=1;j<=n+1;j++)cin >> jz[i][j];
        int rk=0,i=1;
        for (int t=1;t<=n;t++){             //依次消xt
            //通过交换找到系数不为0的xi
            int j=i;
            while(j<=n&&check0(jz[j][t]))j++;
            if (j>n)continue;               //没有该主元直接跳过
            swap(jz[i],jz[j]);
            //化1
            double tmp=jz[i][t];
            for (int j=1;j<=n+1;j++){
                jz[i][j]/=tmp;
            }
            //dbg();
            //消掉别的行
            for (int j=1;j<=n;j++){         //被消xt的是第j行
                if (j==i)continue;
                double tmp=-jz[j][t];
                for (int k=1;k<=n+1;k++){     //当前处理第j行的xk
                    jz[j][k]+=jz[i][k]*tmp;
                }
            }
            rk++;
            i++;
            //dbg();
        }
        //判断解的情况
        //先判断无解
        for (int i=1;i<=n;i++){
            bool ff=0;
            for (int j=1;j<=n;j++)if (!check0(jz[i][j]))ff=1;
            if (!ff){
                if (!check0(jz[i][n+1])){       
                    cout << -1;
                    return 0;
                }
            }
        }
        //是否存在无穷解
        if (rk<n){
            cout << 0;
            return 0;
        }
        for (int i=1;i<=n;i++){
            printf("x%d=%.2lf\n",i,jz[i][n+1]);
        }
    	return 0;
    }
    
    • 1

    Information

    ID
    432
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    10
    Tags
    # Submissions
    71
    Accepted
    2
    Uploaded By