EOJ gauss

来源:互联网 发布:ip端口绑定域名 编辑:程序博客网 时间:2024/04/30 16:58
#include <iostream>#include <cmath>#include <stdio.h>using namespace std;#define maxn  100#define fabs(x) ((x)>0?(x):-(x))#define eps 1e-10int gauss_cpivot(int n,double a[][maxn], double b[]){int i,j,k,row;double maxp,t;for(k=0;k<n;k++){for(maxp=0,i=k;i<n;i++){if(fabs(a[i][k])>fabs(maxp))maxp = a[row=i][k];}if(fabs(maxp)<eps)return 0;if(row != k){ for(j=k;j<n;j++)t=a[k][j],a[k][j]=a[row][j],a[row][j]=t;t=b[k],b[k]=b[row],b[row]=t;}for(j=k+1;j<n;j++){a[k][j] /= maxp;for(i=k+1;i<n;i++)a[i][j]-=a[i][k]*a[k][j];}b[k] /= maxp;for(i=k+1;i<n;i++)b[i]-=b[k]*a[i][k];}for(i=n-1;i>=0;i--)for(j=i+1;j<n;j++)b[i]-=a[i][j]*b[j];return 1;}int main(){int i,j,n;double a[maxn][maxn],b[maxn];while(scanf("%d",&n)!=-1){for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&a[i][j]);for(i=0;i<n;i++)scanf("%lf",&b[i]);gauss_cpivot(n,a,b);for(i=0;i<n;i++)printf("%.2lf\n",b[i]);}return 0;}