题目背景
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
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const double eps=1e-7; 9 const int mxn=125; 10 int read(){ 11 int x=0,f=1;char ch=getchar(); 12 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 int n; 17 double a[mxn][mxn]; 18 double b[mxn]; 19 int main(){ 20 n=read(); 21 int i,j; 22 for(i=1;i<=n;i++){ 23 for(j=1;j<=n;j++) 24 a[i][j]=read(); 25 a[i][n+1]=read(); 26 } 27 for(i=1;i<=n;i++){ 28 int p=i; 29 for(j=i+1;j<=n;j++) 30 if(fabs(a[j][i])>fabs(a[p][i]))p=j; 31 if(p!=i)for(j=1;j<=n+1;j++)swap(a[i][j],a[p][j]); 32 if(fabs(a[i][i])<eps){printf("No Solution ");return 0;} 33 for(j=i+1;j<=n;j++){ 34 double x=a[j][i]/a[i][i]; 35 for(int k=i;k<=n+1;k++){ 36 a[j][k]-=x*a[i][k]; 37 } 38 } 39 } 40 for(i=n;i;i--){ 41 for(j=i+1;j<=n;j++) 42 a[i][n+1]-=a[i][j]*a[j][n+1]; 43 a[i][n+1]/=a[i][i]; 44 } 45 for(i=1;i<=n;i++)printf("%.2f ",a[i][n+1]); 46 return 0; 47 }