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]);
}
}