洛谷1583
1 #include2 #include 3 using namespace std; 4 const int maxn=1000; 5 int n,x; 6 double a[maxn][maxn]; 7 inline void read(int &k){ 8 k=0; int f=1; char c=getchar(); 9 while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();10 while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();11 k*=f;12 }13 void swap_a(int x,int y){ for (int i=1;i<=n+1;i++) swap(a[x][i],a[y][i]);}14 bool Gauss(){15 int now=1;16 while(now<=n){17 if (a[now][now]==0){18 for (int i=now+1;i<=n;i++) if(a[i][now]!=0) {swap_a(i,now); break;}19 if (a[now][now]==0) return puts("No Solution"),0;20 } 21 double tmp=a[now][now];22 for (int i=1;i<=n+1;i++) a[now][i]=a[now][i]/tmp; 23 for (int i=1;i<=n;i++){ 24 if (i==now) continue; double tmp=a[i][now];25 for (int j=1;j<=n+1;j++) a[i][j]-=a[now][j]*tmp;26 }27 now++;28 }29 return 1;30 }31 int main(){32 read(n);33 for (int i=1;i<=n;i++)34 for (int j=1;j<=n+1;j++) read(x),a[i][j]=x;35 if (Gauss()) for (int i=1;i<=n;i++) printf("%.2f\n",a[i][n+1]); printf("\n");36 return 0;37 }