zoukankan      html  css  js  c++  java
  • 「LuoguP3389」【模板】高斯消元法

    题目背景

    Gauss消元

    题目描述

    给定一个线性方程组,对其求解

    输入输出格式

    输入格式:

    第一行,一个正整数 nn

    第二至 n+1n+1行,每行 n+1n+1 个整数,为a_1, a_2 cdots a_na1,a2an 和 bb,代表一组方程。

    输出格式:

    共n行,每行一个数,第 ii行为 x_ixi (保留2位小数)

    如果不存在唯一解,在第一行输出"No Solution".

    输入输出样例

    输入样例#1: 复制
    3
    1 3 4 5
    1 4 7 3
    9 3 2 2
    输出样例#1: 复制
    -0.97
    5.18
    -2.39

    说明

    1 leq n leq 100, left | a_i ight| leq {10}^4 , left |b ight| leq {10}^41n100,ai104,b104

    题解

    这个东西从寒假拖到现在qwq

    大概是自己变强了吧,觉得写起来蛮轻松的qwq

     1 /*
     2 qwerta 
     3 P3389 【模板】高斯消元法 Accepted 
     4 100
     5 代码 C++,0.95KB
     6 提交时间 2018-11-02 07:49:21
     7 耗时/内存 36ms, 800KB
     8 */
     9 #include<iostream>
    10 #include<cstdio>
    11 #include<cmath>
    12 using namespace std;
    13 double a[103][104];
    14 bool sf[103];
    15 int pos[103];
    16 double ans[103];
    17 int main()
    18 {
    19     //freopen("a.in","r",stdin);
    20     ios::sync_with_stdio(false);
    21     int n;
    22     cin>>n;
    23     for(int i=1;i<=n;++i)
    24     for(int j=1;j<=n+1;++j)
    25     cin>>a[i][j];
    26     for(int s=1;s<=n;++s)
    27     {
    28         int mac=0,macc=-1e4-2333;//mac记录系数绝对值最大的行号,macc记录绝对值
    29         for(int i=1;i<=n;++i)
    30         if(!sf[i])//如果这一行没有被选过
    31         {
    32             if(abs(a[i][s])>macc)
    33             {
    34                 mac=i,
    35                 macc=a[i][s];
    36             }
    37         }
    38         if(abs(a[mac][s])<1e-7){cout<<"No Solution";return 0;}//绝对值最大的系数为0,则无解
    39         double c=a[mac][s];//c为最大行第一个非零项的系数
    40         pos[s]=mac;//第s个未知数的结果在第mac行
    41         sf[mac]=1;//打个被选过的标记
    42         for(int j=s;j<=n+1;++j)//先把最大行化简
    43         {
    44             a[mac][j]/=c;
    45         }
    46         for(int i=1;i<=n;++i)
    47         if(i!=mac)
    48         {
    49             double c=a[i][s]/a[mac][s];
    50             for(int j=s;j<=n+1;++j)
    51             a[i][j]-=a[mac][j]*c;//把第i行的首项化到跟mac行一样,再减掉mac行的当前项
    52         }
    53         /*
    54         for(int i=1;i<=n;++i)
    55         {
    56             for(int j=1;j<=n+1;++j)
    57             cout<<a[i][j]<<" ";
    58             cout<<endl;
    59         }
    60         cout<<endl;
    61         */
    62     }
    63     for(int i=1;i<=n;++i)
    64     ans[i]=a[pos[i]][n+1];//取解
    65     for(int i=1;i<=n;++i)
    66     printf("%.2f
    ",ans[i]);
    67     return 0;
    68 }

     (反正也不考裸题 难的又看不出来 不知道我写个什么玩意儿

  • 相关阅读:
    span里设置高度
    Tensorflow2.0语法
    Python-OpenCV中的filter2D()函数
    解决安装tensorflow等速度慢,超时
    keras绘图之pydot和graphviz的导入( pydot` failed to call GraphViz)
    天天向上
    time库
    PythonDraw及turtle库
    TempComvert及-eval的用法
    百分号字符串拼接
  • 原文地址:https://www.cnblogs.com/qwerta/p/9894048.html
Copyright © 2011-2022 走看看