标签:can log space cin cpp div 稳定性 ret main
就是给定你若干个方程组,然后求解。
这里有一份正确性保证的板子,网上的好多都有bug,找了好久。。
#include<bits/stdc++.h> using namespace std; int n; double g[200][200]; bool gauss() { int r; for(int i=1;i<=n;i++) { r=i; for(int j=i+1;j<=n;j++) if(fabs(g[j][i])>fabs(g[r][i])) r=j; if(r!=i) for(int j=1;j<=n+1;j++) swap(g[i][j],g[r][j]);//交换提高数值稳定性,保证gii!=0 if(g[i][i]==0) return 0;//判断无解的情况,g[i][i]是绝对值最大,如果最大等于0,一定无解 for(int k=i+1;k<=n;k++) { double f=g[k][i]/g[i][i];//用一个临时变量储存乘以的倍数 for(int j=i;j<=n+1;j++) g[k][j]-=f*g[i][j]; } }//回代,最后g[1~n][n+1]就是解 for(int i=n;i>=0;i--) { for(int j=i+1;j<=n;j++) g[i][n+1]-=g[j][n+1]*g[i][j]; g[i][n+1]/=g[i][i]; } return 1; } void output() { for(int i=1;i<=n;i++) printf("%.2f\n",g[i][n+1]); } int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%lf",&g[i][j]); if(gauss()) output(); else puts("No Solution"); return 0; }
标签:can log space cin cpp div 稳定性 ret main
原文地址:http://www.cnblogs.com/foreverpiano/p/gauss.html