Gauss消元60求助

P2455 [SDOI2006] 线性方程组

信息学carryHarry @ 2022-05-02 16:57:18

#include<bits/stdc++.h>

using namespace std;
const double N=1e-6;
int n;
struct node{
    double a[105];
    int p;
}e[105];
double x[105];
bool find(int a,int b)
{
    for(int i=a;i<=n;i++){
        if(abs(e[i].a[b])>N){
            swap(e[a],e[i]);
            return 1;
        }
    }
    return 0;
}
bool Guess()
{
    int i=1,p=0,b=0;
    for(;i<=n;i++){
        for(p++;p<=n+1&&!find(i,p);p++){
            b=1;
        }
        if(p>n){
            break;
        }
        e[i].p=p;
        for(int j=1;j<=n;j++){
            if(i!=j){
                for(int k=n+1;k>=p;k--){
                    e[j].a[k]-=e[i].a[k]/e[i].a[p]*e[j].a[p];
                }
            }
        }
    }
    for(i--;i;i--){
        x[e[i].p]=e[i].a[n+1]/e[i].a[e[i].p];
    }
    if(p==n+1){
        cout<<0;
        exit(0);    
    }
    if(b){
        cout<<-1;
        exit(0);
    }
    return 1;
}                       
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>e[i].a[j];
        }
    }
    if(Guess()){
        cout<<fixed<<setprecision(2);
        for(int i=1;i<=n;i++){
            cout<<"x"<<int(i)<<"="<<x[i]<<'\n';
        }
    }
    return 0;
}

by 黑影洞人 @ 2022-05-02 17:05:21

Cu ball


by 信息学carryHarry @ 2022-05-02 17:12:36

@黑影洞人

什么意思


by xhgua @ 2022-05-02 17:43:44

@信息学carryHarry Cu=铜 Ball=q球

连起来就是“同求”的意思


|