题目:
题意:
给出一个 n n n元一次的方程,对其求解
分析:
大概思路就是不断用某个式子去抵消其他式子的某一项未知数的系数,这样进行
n
−
1
n-1
n−1,我们就能得到
a
i
x
i
=
b
i
a_ix_i=b_i
aixi=bi
直接求解然后将
x
i
x_i
xi向其他式子带入,一个个求出其他未知数
代码:
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<vector>
#define LZX Mu
#define LL long long
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
double x[105][105];
int main()
{
int n=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
scanf("%lf",&x[i][j]);
for(int i=1;i<=n;i++)
{
int k=i;
for(int j=i+1;j<=n;j++) if(fabs(x[k][i])<fabs(x[j][i])) k=j;
if(fabs(x[k][i])<(double)1e-7) return !printf("No Solution");
if(i!=k) swap(x[i],x[k]);
double d=x[i][i];
for(int j=i;j<=n+1;j++) x[i][j]/=d;
for(int j=i+1;j<=n;j++)
{
double mul=x[j][i];
for(int ij=i;ij<=n+1;ij++) x[j][ij]-=x[i][ij]*mul;
}
}
double ans[105];
ans[n]=x[n][n+1];
for(int i=n-1;i;i--)
{
ans[i]=x[i][n+1];
for(int j=i+1;j<=n;j++) ans[i]-=x[i][j]*ans[j];
}
for(int i=1;i<=n;i++) printf("%.2lf\n",ans[i]);
return 0;
}