标签:目的 std def 处理 scan 模板 nbsp 详解 const
详解参照其他博客,简单模板如下
1 /*处理出的倒三角是这个形状的 2 x1 x2 x3=.. 3 x2 x3=.. 4 x3=.. 5 */ 6 #include<bits/stdc++.h> 7 #define N 205 8 using namespace std; 9 const double eps=1e-8; 10 int n; 11 double a[N][N],del; 12 bool gauss(){ 13 for(int i=1;i<=n;i++){//处理第i列,行也处理到i 14 int k=i;//i:当前处理的列 和 行 15 for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;//找到i列最大的系数在的行 16 if(fabs(del=a[k][i])<eps)return 0;//最大数的行都为0,无解或多解 del:i列最大系数 17 for(int j=i;j<=n+1;j++)swap(a[i][j],a[k][j]);//交换两行,将大的换到上面去,底下开始消元 18 for(int j=i;j<=n+1;j++)a[i][j]/=del;//最大系数化为 1 19 for(k=1;k<=n;k++)if(k!=i){ 20 del=a[k][i]; 21 for(int j=i;j<=n+1;j++)a[k][j]-=a[i][j]*del;//也可看做a[k][j]=a[k][j]/del-a[i][j] 22 //即把a[k][i]也系数化为1,再减去i行,显然k的第i列变成0了,即达到了消元的目的 23 } 24 } 25 return 1; 26 } 27 int main(){ 28 scanf("%d",&n); 29 for(int i=1;i<=n;i++) 30 for(int j=1;j<=n+1;j++) 31 scanf("%lf",&a[i][j]); 32 bool flag=gauss(); 33 if(!flag) puts("No Solution"); 34 else 35 { 36 for(int i=1;i<=n;i++) 37 printf("%.2lf\n",a[i][n+1]); 38 } 39 return 0; 40 }
标签:目的 std def 处理 scan 模板 nbsp 详解 const
原文地址:https://www.cnblogs.com/71-111/p/9463992.html