求调(20pts
查看原帖
求调(20pts
818475
ChpyX2楼主2025/1/25 19:41
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n;
double a[maxn][maxn],ans[maxn];
void show(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cout<<a[i][j]<<' ';
        }
        cout<<'\n';
    }
    return;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>a[i][j];
        }
    }
    for(int now=1,now2=1;now2<=n;now2++){
        now=now2;
        for(int j=now2+1;j<=n;j++) {
        	if(a[j][now2]>a[now][now2])now=j;
		}
        if(a[now][now2]==0){
            cout<<"No Solution";
            return 0;
        }
        swap(a[now2],a[now]);
        // cout<<"now: "<<now<<" now2:"<<now2<<"\n";
        // show();   
        double cnt=1/a[now2][now2];
        for(int i=1;i<=n+1;i++){
            a[now2][i]*=cnt;
        }
        // cout<<now2<<"  now: "<<now<<" main:\n";
        // show();
        for(int i=1;i<=n;i++){
            if(i==now2)continue;
            for(int j=n+1;j>=1;j--){
                a[i][j]-=a[now2][j]*a[i][now2];
            }
        }
        // cout<<"now: "<<now<<" else:\n";
        // show();
    }
    for(int i=1;i<=n;i++){
        double tot=0;
        for(int j=1;j<=n;j++){
            tot+=a[i][j];
        }
        if(tot==0||a[i][i]!=1){
            cout<<"No Solution\n";
            return 0;
        }
        else ans[i]=a[i][n+1];
    }
    for(int i=1;i<=n;i++)printf("%.2lf\n",ans[i]);
    return 0;
}
//from chpyx2

调不出来:(

前面几行运行没问题,后面就不对劲了

可以用里面show函数辅助调试,作用是输出目前的整个矩阵

2025/1/25 19:41
加载中...