模板题
题目转载———caioj.cn
题目描述
有
n
n
n个未知数
x
1
,
x
2
,
x
3
…
…
x
n
x_1,x_2,x_3……x_n
x1,x2,x3……xn,满足:
a
1
1
×
x
1
+
a
2
1
×
x
2
+
a
3
1
×
x
3
…
…
+
a
n
1
×
x
n
=
b
1
a^1_1\times x_1+a^1_2\times x_2+a^1_3\times x_3……+a^1_n\times x_n=b_1
a11×x1+a21×x2+a31×x3……+an1×xn=b1
a
1
2
×
x
1
+
a
2
2
×
x
2
+
a
3
2
×
x
3
…
…
+
a
n
2
×
x
n
=
b
2
a^2_1\times x_1+a^2_2\times x_2+a^2_3\times x_3……+a^2_n\times x_n=b_2
a12×x1+a22×x2+a32×x3……+an2×xn=b2
…
…
…
…
…
…
…
…
…
…
…
…
…
…
……………………………………
……………………………………
a
1
n
×
x
1
+
a
2
n
×
x
2
+
a
3
n
×
x
3
…
…
+
a
n
n
×
x
n
=
b
n
a^n_1\times x_1+a^n_2\times x_2+a^n_3\times x_3……+a^n_n\times x_n=b_n
a1n×x1+a2n×x2+a3n×x3……+ann×xn=bn
求
x
1
,
x
2
,
x
3
…
…
x
n
x_1,x_2,x_3……x_n
x1,x2,x3……xn的值。(保证有解)
输入格式
第一行给出
n
(
1
≤
n
≤
100
)
n(1\leq n\leq100)
n(1≤n≤100)
下来
n
n
n行,每行给出
n
+
1
n+1
n+1个实数,分别是
a
1
i
a
n
i
和
b
i
a^i_1~a^i_ n 和b_i
a1i ani和bi。
输出格式
输出 x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1,x2,x3……xn的值(相邻两个用一个空格隔开,每个数保留 3 3 3位小数)
样例输入
3
2.5 5.0 3.0 32.5
1.0 4.5 2.0 22
4.0 3.5 1.5 26.5
样例输出
3.000 2.000 5.000
讲解
————来源百度经验
代码
#include<cstdio>
#include<cstring>
using namespace std;
double a[110][110],f[110];int n;
void gauss()
{
for(int i=1;i<n;++i)
for(int i2=i+1;i<=n;++i)
{
double bili/*(哲♂学)比例*/=a[i2][i]/a[i][i];
for(int j=1;i<=n+1;++i)a[i2][j]-=bili*a[i][j];
}
for(int i=n;i>=1;--i)
{
double t=a[i][n+1];
for(int j=i+1;j<=n;++j)t-=f[j]*a[i][j];
f[i]=t/a[i][i];
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)for(int j=1;j<=n+1;++j)scanf("%lf",&a[i][j]);
gauss();
for(int i=1;i<n;++i)printf("%.3lf ",f[i]);
printf("%.3lf\n",f[n]);
return 0;
}