洛谷P3389 【模板】高斯消元法
高斯—约当消元法:
1 #include<bits/stdc++.h> 2 using namespace std; 3 double a[105][105]; 4 double eps=1e-7; 5 int main(){ 6 int n;scanf("%d",&n); 7 for(int i=1;i<=n;i++) 8 for(int j=1;j<=n+1;j++) scanf("%lf",&a[i][j]); 9 for(int i=1;i<=n;i++){//枚举列 10 int max=i; 11 for(int j=i+1;j<=n;j++) 12 if(fabs(a[j][i])>fabs(a[max][i])) max=j;//选取该列最大系数,真实目的是选一个非0系数 13 for(int j=1;j<=n+1;j++) swap(a[i][j],a[max][j]);//移到前面 14 if(fabs(a[i][i])<eps){//对角线上的主元系数为0,说明没有唯一解 15 puts("No Solution"); 16 return 0; 17 } 18 for(int j=n+1;j>=1;j--) a[i][j]=a[i][j]/a[i][i];//把这一行的主元系数变为1 19 for(int j=1;j<=n;j++){//消去主元所在列的其他行的主元 20 if(j!=i){ 21 double temp=a[j][i]/a[i][i]; 22 for(int k=1;k<=n+1;k++) a[j][k]-=a[i][k]*temp; 23 } 24 } 25 } 26 for(int i=1;i<=n;i++) printf("%0.2lf\n",a[i][n+1]); 27 return 0; 28 }

浙公网安备 33010602011771号