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 }

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

  • 相关阅读:
    IOS开发关于测试的好的网址资源
    创建型模式--工厂模式
    在XcodeGhost事件之后,获取更纯净的Xcode的方法。
    算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数
    结构型模式--装饰模式
    设计模式 总揽 通过这篇随笔可以访问所需要了解的设计模式
    IOS之未解问题--关于IOS图像渲染CPU和GPU
    链接
    Matlab2014下载和破解方法,以及Matlab很好的学习网站
    苹果Mac隐藏壁纸在哪里?Mac隐藏壁纸查找教程
  • 原文地址:https://www.cnblogs.com/qwerta/p/9894048.html
Copyright © 2011-2022 走看看