• 洛谷.3389.[模板]高斯消元法


    题目链接

    #include <cmath>
    #include <cstdio>
    #include <algorithm>
    const int N=105;
    const double eps=1e-10;
    
    int n;
    inline bool bigger(double a,double b) {return std::fabs(a)>std::fabs(b);}
    inline bool cmp(double a) {return std::fabs(a)>eps;}
    struct Gauss
    {
    	double f[N][N],ans[N];
    	void Init()
    	{
    		for(int i=1; i<=n; ++i)
    			for(int j=1; j<=n+1; ++j)
    				scanf("%lf",&f[i][j]);
    	}
    	bool Solve()
    	{
    		for(int j=1; j<=n; ++j)
    		{
    			int mxrow=j;
    			for(int i=j+1; i<=n; ++i)
    				if(bigger(f[i][j],f[mxrow][j])) mxrow=i;
    			if(mxrow!=j) std::swap(f[j],f[mxrow]);
    //				for(int i=1; i<=n+1; ++i)
    //					std::swap(f[j][i],f[mxrow][i]);
    			for (int i=j+1; i<=n; ++i)
    				if(cmp(f[i][j]))
    				{
    					double t=f[i][j]/f[j][j];
    					for(int k=1; k<=n+1; ++k)
    						f[i][k]-=f[j][k]*t;
    				}
    		}
    		for(int i=n; i; --i)
    		{
    			if(!cmp(f[i][i])) return 0;
    			for(int j=i+1; j<=n; ++j)
    				f[i][n+1]-=f[i][j]*ans[j];
    			ans[i]=f[i][n+1]/f[i][i];
    		}
    		return 1;
    	}
    	void Print()
    	{
    		for(int i=1; i<=n; ++i) printf("%.2lf
    ",ans[i]);
    	}
    }g;
    
    int main()
    {
    	scanf("%d",&n);
    	g.Init();
    	if(g.Solve()) g.Print();
    	else printf("No Solution");
    	return 0;
    }
    
  • 相关阅读:
    轮播闪白效果
    轮播图效果
    打字游戏简约版
    js购物时的放大镜效果
    单例模式
    docker
    【spring】注解梳理
    【spring源码-1】BeanFactory + XMLBeanFactory
    【设计模式】
    【大数据Spark】PC单机Spark开发环境搭建
  • 原文地址:https://www.cnblogs.com/SovietPower/p/8445550.html
Copyright © 2020-2023  润新知