zoukankan      html  css  js  c++  java
  • [SDOI2006] 线性方程组

    洛谷 P2455 传送门

    刚开始写了个消成上三角的,结果狂wa。

    后来经过研究发现,消成上三角那种不能直接判断无解或无穷多解,需要其它的操作。

    所以干脆学了个消成对角线的,写了一发A了。

    其实两种消元的方法都差不多,就当存个板子吧。

     1 #include<cstdio>
     2 
     3 void swap(double &x,double &y)
     4 {
     5     double t=x;x=y;y=t;
     6 }
     7 
     8 double v(double rx)
     9 {
    10     return rx>0?rx:(-rx);
    11 }
    12 
    13 int n;
    14 double a[55][55];
    15 double x[55];
    16 const double eps=0.00001;
    17 
    18 int main()
    19 {
    20     scanf("%d",&n);
    21     for(int i=1;i<=n;i++)
    22         for(int j=1;j<=n+1;j++)
    23             scanf("%lf",&a[i][j]);
    24     for(int i=1;i<=n;i++)
    25     {
    26         int p=i;
    27         for(int j=i+1;j<=n;j++)
    28             if(v(a[j][i])>v(a[p][i]))p=j;
    29         if(i!=p)for(int j=i;j<=n+1;j++)swap(a[i][j],a[p][j]);
    30         if(v(a[i][i])<eps)continue;
    31         double div=a[i][i];
    32         for(int j=i;j<=n+1;j++)a[i][j]/=div;
    33         for(int j=1;j<=n;j++)
    34         {
    35             if(i==j)continue;
    36             double div=a[j][i];
    37             for(int k=1;k<=n+1;k++)
    38                 a[j][k]-=div*a[i][k];
    39         }
    40     }
    41     int no=0,inf=0;
    42     for(int i=1;i<=n;i++)
    43     {
    44         int p=1;
    45         while(p<=n+1&&v(a[i][p])<=eps)p++;
    46         if(p==n+1)no=1;
    47         if(p>n+1)inf=1;
    48     }
    49     if(no){printf("-1");return 0;}
    50     if(inf){printf("0");return 0;}
    51     for(int i=n;i;i--)x[i]=a[i][n+1];
    52     for(int i=1;i<=n;i++)
    53         printf("x%d=%.2lf
    ",i,x[i]);
    54     return 0;
    55 }
  • 相关阅读:
    Python自学之乐-python中break continue exit() pass浅析
    Python自学之乐-Python字典实现简单的三级菜单
    Python自学之乐-浅析Python的深浅拷贝
    百度云服务器允许外网访问
    svg究竟是什么?
    基础知识之SQL
    基础知识之html/css/js
    vue基础知识
    数据库基础知识
    Windows 知识基础
  • 原文地址:https://www.cnblogs.com/eternhope/p/9922628.html
Copyright © 2011-2022 走看看