有关于线性相关的疑问。(非诈骗非钓鱼)
查看原帖
有关于线性相关的疑问。(非诈骗非钓鱼)
453460
End1essSummer楼主2022/8/3 16:30

Q:我在自己过了这道模板题之后查看了一部分题解(因为学长讲过,所以自己能切 虽然自己写的比较狂野),发现有很多的题解并没有讲到线性相关 并且也没有讲到自由元等(也有可能是我眼瞎

然后我看了一部分代码 发现并没有判断线性相关的代码 我把题解粘到了本地上跑了自己构造的几组样例 发现答案都正确 请问各位大佬 为什么这些题解能过(T T)

(另:为了感谢您在百忙之中抽出时间来解答我的疑问 本蒟蒻将会送上不止一提的关注作为感谢( ^ ^) )

My code:

#include<bits/stdc++.h>
using namespace std;
//System of linear equations线性方程组 ==Sole
//Linear correlation 线性相关  ==Lc
double Sole[110][110],x[114];
int n;
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>Sole[i][j];
        }
    }for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            bool Lc=1;
            if(i==j) continue;
            for(int k=1;k<=n+1;k++){
                if(Sole[j][k]!=0&&(int)(Sole[i][k])%(int)(Sole[j][k])!=0){
                    Lc=0;
                }
            }if(Lc==1){
                cout<<"No Solution\n";
                exit(0);
            }
        }//判线性相关
    }for(int i=1;i<=n;i++){//swap
        int maxn=-114514;
        for(int j=i;j<=n;j++){
            maxn=max(maxn,(int)Sole[j][i]);
        }for(int j=i;j<=n;j++){
            if(maxn==Sole[j][i]){
                swap(Sole[j],Sole[i]);break;//别浪费时间 评测机能有几个1ms呢(逃
            }
        }if(maxn==-114514){//sb错误1 少打个等号2333
            cout<<"No Solution\n";
            exit(0);
        }
    }for(int i=1;i<=n;i++){//Gauss消元
        for(int j=i+1;j<=n;j++){
            double nums=Sole[j][i]/Sole[i][i];
            for(int k=i+1;k<=n+1;k++){
                Sole[j][k]-=Sole[i][k]*nums;
            }
        }
    }for(int i=n;i>=1;i--){//带回求值
        double sum=0;
        for(int j=n;j>i;j--){
            sum+=x[j]*Sole[i][j];
        }x[i]=(Sole[i][n+1]-sum)/Sole[i][i];
    }for(int i=1;i<=n;i++){
        printf("%.2lf\n",x[i]);
    }
}
2022/8/3 16:30
加载中...