标签: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