zoukankan      html  css  js  c++  java
  • cogs 721. [SDOI2007] 线性方程组

    721. [SDOI2007] 线性方程组

    ★★   输入文件:gaess.in   输出文件:gaess.out   简单对比
    时间限制:1 s   内存限制:128 MB

    【问题描述】
    已知 n 元线性一次方程组。


    a1,1x1+a1,2x2++a1,nxn=b1
    a2,1x1+a2,2x2++a2,nxn=b2
    ………………
    an,1x1+an,2x2++an,nxn=bn
    其中: n<=50.系数是整数,绝对值<=100 , bi的值都是正整数且<300
    编程任务:
    根据输入的数据,编程输出方程组的解的情况。
    【输入】(gaess.in)
    第一行,未知数的个数。以下nn+1列:分别表示每一格方程的系数及方程右边的值。
    n
    a1,1a1,2a1,nb1
    a2,1a2,2a2,nb2
    …………
    an,1an,2an,nbn
    【输出】(gaess.out)
    如果方程组无实数解输出1 ;
    如果有无穷多实数解,输出 0 ;
    如果有唯一解,则输出解(小数点后保留两位小数,如果解是0,则不保留小数)
    【样例输入】
    3
    2 -1 1 1
    4 1 -1 5
    1 1 1 0
    【样例输出】

    x1=1.00

    x2=0

    x3=-1.00

    2017/03/22新加3组数据 by rapiz

    /*高斯消元求解线性方程组*/
    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cmath>
    using namespace std;
    #define N 100
    #define eps (1e-8)
    int n;double a[N][N];
    int main(){
        freopen("gaess.in", "r", stdin);
        freopen("gaess.out", "w", stdout);
        //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]);
        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[p][j],a[i][j]);
            if(fabs(a[i][i])<eps)continue;
            double tmp=a[i][i];
            for(int j=1;j<=n+1;j++)a[i][j]/=tmp;
            for(int j=1;j<=n;j++)
                if(i!=j){
                    double tmp=a[j][i];
                    for(int k=1;k<=n+1;k++)a[j][k]-=a[i][k]*tmp;
                }
        }
        int imp=0,ult=0;
        for(int i=1;i<=n;i++){
            int j=1;
            while(fabs(a[i][j])<eps&&j<=n+1)j++;
            if(j>n+1)ult=1;
            else if(j==n+1)imp=1;
        }
        if(imp){printf("-1");return 0;}
        if(ult){printf("0");return 0;}
        for(int i=1;i<=n;i++){
            if(fabs(a[i][n+1])<eps)printf("x%d=0
    ",i);
            else printf("x%d=%.2lf
    ",i,a[i][n+1]);
        }
    }
  • 相关阅读:
    [置顶] 宏途_LCD调试流程.
    字典树的数据结构及基本算法的实现
    uva 10714 Ants(贪心)
    paip.输入法编程---增加码表类型
    chomp方法
    ios 限制输入长度
    我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
    Android用户界面 UI组件--AdapterView及其子类(一) ListView及各种Adapter详解
    C#系列教程——switch定义及使用
    局域网内linux由ip反解析主机名
  • 原文地址:https://www.cnblogs.com/thmyl/p/6940841.html
Copyright © 2011-2022 走看看