又做了一道水题
实在是太水啦!
直接列方程高斯消元即可
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-8 ;
int n;
double k[20][20],a[20][20],x[20][20],r,sum[20];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n+1;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&k[i][j]),sum[i]+=k[i][j]*k[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
a[i][j]=(k[i][j]-k[i+1][j])*2;
a[i][n+1]=sum[i]-sum[i+1];
}
for(int i=1;i<=n;i++)
{
int temp=i;
for(temp=i;temp<=n;temp++)
if(fabs(a[temp][i])>0) break;
if(temp!=i)
for(int j=1;j<=n+1;j++) swap(a[i][j],a[temp][j]);
double key=a[i][i];
for(int j=1;j<=n+1;j++) a[i][j]/=key;
for(int j=1;j<=n;j++) if(j!=i)
{
key=a[j][i];
for(int k=1;k<=n+1;k++)
a[j][k]-=key*a[i][k];
}
}
for(int i=1;i<n;i++) printf("%.3lf ",a[i][n+1]);
printf("%.3lf",a[n][n+1]);
}
心得:
1.高斯消元是很重要的,是必须要会的,这个模板是非常好的