版权声明:转载无所谓的。。。 https://blog.csdn.net/xuxiayang/article/details/82663681
链接
https://www.luogu.org/problemnew/show/P3389
大意
求解一个 元一次线性方程
思路
高斯消元
(说白了就是用计算机模拟加减消元)
代码
#include<cstdio>
#include<cmath>
#define r(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;int n;
double b[101],c[101][101];
inline void swap(register double &x,register double &y){double t=x;x=y;y=t;return;}\
signed main()
{
scanf("%d",&n);
r(i,1,n)
{
r(j,1,n) scanf("%lf",&c[i][j]);
scanf("%lf",&b[i]);
}
r(i,1,n)
{
r(j,i+1,n)
if(fabs(c[j][i]>1e-8)) //变换矩阵
{
r(k,1,n) swap(c[i][k],c[j][k]);
swap(b[i],b[j]);
}
r(j,1,n)
{
if(i==j) continue;
double rnt=c[j][i]/c[i][i];
r(k,i,n) c[j][k]-=c[i][k]*rnt;//消元
b[j]-=b[i]*rnt;
}
}
r(i,1,n) if(!c[i][i])return printf("No Solution")&0;
r(i,1,n) printf("%.2lf\n",b[i]/c[i][i]);
}