• JDOJ 1234: VIJOS-P1052 高斯消元


    JDOJ 1234: VIJOS-P1052 高斯消元

    JDOJ传送门

    Description

    ​ 贾老二是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面。虽然他解决 2x=2 这样的方程游刃有余,但是对于 {x+y=3 x-y=1} 这样的方程组就束手无策了。于是他要你来帮忙。前提是一次方程组且保证在integer的范围内可以处理所有问题。

    Input

    ​ 第一行一个数字N(1≤N≤100)表示要求的未知数的个数,同时也是所给的方程个数。 第2到N+1行,每行N+1个数。前N个表示第1到N个未知数的系数。第N+1个数表示N个未知数乘以各自系数后的加和。(保证有唯一整数解)

    Output

    ​ 一行N个数,表示第1到N个未知数的值。

    Sample Input

    2 1 1 3 1 -1 1

    Sample Output

    2 1


    题解:

    高斯消元模板题。

    关于高斯消元,请走:

    浅谈高斯消元

    WA6次PE一次。

    不愧是我

    注意精度问题:首先不能无脑int,因为要四舍五入。

    然后不能无脑输出,因为可能会出现-0的情况(四舍五入后)。所以这里还要判一下这种情况。

    代码:

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const double eps=1e-6;
    int n;
    double a[110][110],b[110];
    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++)
        {
            for(int j=i;j<=n;j++)
                if(fabs(a[j][i])>eps)
                {
                    for(int k=1;k<=n;k++)
                        swap(a[j][k],a[i][k]);
                    swap(b[i],b[j]);
                }
            for(int j=1;j<=n;j++)
            {
                if(i==j)
                    continue;
                double rate=a[j][i]/a[i][i];
                for(int k=1;k<=n;k++)
                    a[j][k]-=a[i][k]*rate;
                b[j]-=b[i]*rate;
            }
        }
        for(int i=1;i<n;i++)
        {
            double ans=b[i]/a[i][i];
            if(fabs(ans)<eps)
                printf("%.0lf ",fabs(ans));
            else
                printf("%.0lf ",ans);
        }
        double ans=b[n]/a[n][n];
        if(fabs(ans)<eps)
            printf("%.0lf",fabs(ans));
        else
            printf("%.0lf",ans);
        return 0;
    }
    
  • 相关阅读:
    sublime使用
    eclipse导入工程中文乱码
    npm 代理
    栈和堆
    Linux常用命令大全
    Google云开启SSH登录方法
    景安快运挂在磁盘-支持宝塔
    discuz 批量删除回复并且保留主题的方法,亲测3.4版本通过
    博客园去掉页面的广告的方法
    WordPress忘记后台登录地址时怎么办?万能登录地址
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13848347.html
Copyright © 2020-2023  润新知