列出方程后就是高斯消元了.
AC code:
#include <cstdio>
const int N=101;
int n;
double a[N][N],A[N][N];
double Abs(double x){
return x<0?-x:x;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n+1;i++){
for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
A[i][j]=-2*a[i][j]+2*a[i+1][j];
A[i][n+1]+=-(a[i][j]*a[i][j])+(a[i+1][j]*a[i+1][j]);
}
}
for(int i=1;i<=n;i++){
int r=i;
for(int j=i+1;j<=n;j++){
if(Abs(A[j][i])>Abs(A[r][i])) r=j;
}
for(int j=1;j<=n+1;j++){
double t=A[i][j];A[i][j]=A[r][j];A[r][j]=t;
}
for(int j=i+1;j<=n;j++){
for(int k=n+1;k>=i;k--) A[j][k]-=A[i][k]*A[j][i]/A[i][i];
}
}
for(int j=n;j>=1;j--){
for(int k=j+1;k<=n;k++) A[j][n+1]-=A[k][n+1]*A[j][k];
A[j][n+1]/=A[j][j];
}
printf("%.3lf",A[1][n+1]);
for(int i=2;i<=n;i++) printf(" %.3lf",A[i][n+1]);
return 0;
}