zoukankan      html  css  js  c++  java
  • 洛谷 P3389 【模板】高斯消元法

    洛谷 P3389 【模板】高斯消元法

    洛谷传送门

    题目背景

    Gauss消元

    题目描述

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

    输入格式

    第一行,一个正整数 nn

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

    输出格式

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

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


    题解:

    高斯消元模板题。

    关于高斯消元,请走:

    浅谈高斯消元

    代码:

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    const double eps=1e-6;
    int n;
    double a[110][110],b[110];
    bool flag;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                scanf("%lf",&a[i][j]);
            scanf("%lf",&b[i]);
        }
        for(int i=1;i<=n;i++)
        {
            flag=0;
            for(int j=i;j<=n;j++)
            {
                if(flag)
                    break;
                if(fabs(a[j][i])>eps)
                {
                    for(int k=1;k<=n;k++)
                        swap(a[i][k],a[j][k]);
                    swap(b[i],b[j]);
                    flag=1;
                }
            }
            if(!flag)
            {
                puts("No Solution");
                return 0;
            }
            for(int j=1;j<=n;j++)
            {
                if(i==j)
                    continue;
                double rate=a[j][i]/a[i][i];
                for(int k=i;k<=n;k++)
                    a[j][k]-=a[i][k]*rate;
                b[j]-=b[i]*rate;
            }
        }
        for(int i=1;i<=n;i++)
            printf("%.2lf
    ",1.0*b[i]/a[i][i]);
        return 0;
    }
    
  • 相关阅读:
    ecolise 设置反编译
    整理03
    JAVA创建对象的五种方式
    JAVA中的深复制和浅复制--建议多看几遍
    选择题
    python学习第九天
    python学习第八天
    python学习第七天
    python学习第五天
    python学习第四天
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13848151.html
Copyright © 2011-2022 走看看