bzoj1013高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1013
似乎是很明显的高斯消元;
第一次写高斯消元。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define eps 1e-6; using namespace std; int n; double a[15][15],d[15]; void gauss() { for(int i=1;i<=n;i++) { int t=i; for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[t][i]))t=j; if(t!=i)for(int j=1;j<=n+1;j++) swap(a[i][j],a[t][j]);//令第i行代表第i个未知数 double tmp=a[i][i];//!!!不能在下一行直接写 a[i][j]/=a[i][i],因为a[i][i]在中途被改 for(int j=1;j<=n+1;j++)a[i][j]/=tmp;//系数化为1 for(int j=1;j<=n;j++) { if(i==j)continue; double x=a[j][i]; for(int k=1;k<=n+1;k++) a[j][k]-=x*a[i][k]; } } for(int i=1;i<n;i++) printf("%.3lf ",a[i][n+1]); printf("%.3lf\n",a[n][n+1]); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf",&d[i]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { double x; scanf("%lf",&x); a[i][j]=2*(x-d[j]); a[i][n+1]+=x*x-d[j]*d[j]; } gauss(); return 0; }