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

    P3389 【模板】高斯消元法

    题目背景

    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

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define maxn 110
    #define eps 0.000000001
    using namespace std;
    int n;
    double a[maxn][maxn];
    void guass(){
        for(int i=1;i<=n;i++){//枚举每个未知量 
            int p=i;
            for(int j=i+1;j<=n;j++)
                if(fabs(a[j][i])>fabs(a[p][i]))p=j;//查找哪一个式子中的该未知量系数最大 
            for(int j=1;j<=n+1;j++)swap(a[i][j],a[p][j]);//让它成为第i个式子 
            double tmp=a[i][i];//系数化为一用 
            if(fabs(tmp)<eps)continue;//因为后面涉及到除法操作,不允许0的存在 
            for(int j=1;j<=n+1;j++)a[i][j]/=tmp;
            for(int j=1;j<=n;j++){
                if(j==i)continue;
                double tmp=a[j][i];
                for(int k=1;k<=n+1;k++){
                    a[j][k]-=tmp*a[i][k];
                }
            }
        }
    }
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n+1;j++)
                scanf("%lf",&a[i][j]);
        guass();
        bool wujie=0,duojie=0;
        for(int i=1;i<=n;i++){//枚举每个等式 
            int cnt=0;
            for(int j=1;j<=n+1;j++){
                if(fabs(a[i][j])<eps)cnt++;
                else break;
            }
            if(cnt==n)wujie=1;
            if(cnt==n+1)duojie=1;
        }
        if(wujie||duojie){puts("No Solution");return 0;}
        for(int i=1;i<=n;i++){
            printf("%.2lf
    ",a[i][n+1]);
        }
    }

     

  • 相关阅读:
    愤怒
    Eclipse的调试功能的10个小窍门
    PL/SQL之基础篇
    PL/SQL之高级篇
    luogu P1015 回文数
    Noip2011 提高组 Day1 T3 Mayan游戏
    各种各样的——玄学卡常技巧
    北京清北 综合强化班 Day5
    [UVA12003] Array Transformer(分块,二分,暴力)
    [POJ3468] A Simple Problem with Integers(分块)
  • 原文地址:https://www.cnblogs.com/thmyl/p/8084605.html
Copyright © 2011-2022 走看看