您的位置:首页 > 其它

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

2017-01-19 13:54 453 查看

 

题目背景

Gauss消元

题目描述

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

输入输出格式

输入格式:

 

第一行,一个正整数n

第二至n+1行,每行n+1个整数,为a1,a2...an和b,代表一组方程。

 

输出格式:

 

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

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

 

输入输出样例

输入样例#1:
1
1 1
输出样例#1:
1.00

说明

1<=n<=100, |ai|<=10000, |b|<=10000

 

/*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const double eps=1e-7;
const int mxn=125;
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n;
double a[mxn][mxn];
double b[mxn];
int main(){
n=read();
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
a[i][j]=read();
a[i][n+1]=read();
}
for(i=1;i<=n;i++){
int p=i;
for(j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a

[i]))p=j; if(p!=i)for(j=1;j<=n+1;j++)swap(a[i][j],a[p][j]); if(fabs(a[i][i])<eps){printf("No Solution\n");return 0;} for(j=i+1;j<=n;j++){ double x=a[j][i]/a[i][i]; for(int k=i;k<=n+1;k++){ a[j][k]-=x*a[i][k]; } } } for(i=n;i;i--){ for(j=i+1;j<=n;j++) a[i][n+1]-=a[i][j]*a[j][n+1]; a[i][n+1]/=a[i][i]; } for(i=1;i<=n;i++)printf("%.2f\n",a[i][n+1]); return 0; }

[p] 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: