• 高斯消元板子


    #include<bits/stdc++.h>
    #define re register int
    #define D double
    using namespace std;
    int n,J;
    D a[600][600],x[600];
    void solve()
    {
    	int h=1,l=1;
    	for(;(h<=n)&&(l<=n);h++,l++)
    	{
    		int maxx=h;
    		for(re j=h+1;j<=n;j++)
    			if(fabs(a[j][l])>fabs(a[maxx][l]))
    				maxx=j;
    		if(maxx!=h)
    			swap(a[h],a[maxx]);
    		if(!a[h][l])
    		{
    			--h;
    			continue;
    		}
    		for(re j=h+1;j<=n;j++)
    		{
    			D tem=a[j][l]/a[h][l];
    			for(re k=l;k<=n+1;k++)
    				a[j][k]-=a[h][k]*tem;
    		}
    	}
    	for(re i=h;i<=n;i++)
    		if(a[i][n+1]!=0)
    		{
    			J=-1;
    			return;
    		}
    	if(h<=n)
    		J=-2;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(re i=1;i<=n;i++)
    		for(re j=1;j<=n+1;j++)
    			scanf("%lf",&a[i][j]);
    	solve();
    	if(J==-1)
    	{
    		printf("-1\n");
    		return 0;
    	}
    	if(J==-2)
    	{
    		printf("0\n");
    		return 0;
    	}
    	for(re i=n;i>0;i--)
    	{
    		D ans=a[i][n+1];
    		for(re j=n;j>i;j--)
    			ans-=a[i][j]*x[j];
    		x[i]=ans/a[i][i];
    	}
    	for(re i=1;i<=n;i++)
    	{
    		if(x[i]==0)
    			printf("x%d=0\n",i);
    		else
    			printf("x%d=%.2lf\n",i,x[i]);
    	}
    	return 0;
    }
    

    2.相对简单,但不能判断无解

    
    
    #include<bits/stdc++.h>
    #define re register int
    #define D double
    using namespace std;
    int n,J;
    D a[600][600];
    void solve()
    {
    	for(re i=1;i<=n;i++)
    	{
    		int maxx=i;
    		for(re j=i+1;j<=n;j++)
    		{
    			if(fabs(a[j][i])>fabs(a[maxx][i]))
    				maxx=j;
    		}
    		if(maxx!=i)
    			swap(a[i],a[maxx]);
    		for(re j=1;j<=n;j++)
    		{
    			if(j==i)
    				continue;
    			D tem;
    			if(!a[i][i])
    				tem=0;
    			else
    				tem=a[j][i]/a[i][i];
    			for(re k=i+1;k<=n+1;k++)
    				a[j][k]-=a[i][k]*tem;
    		}
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	for(re i=1;i<=n;i++)
    		for(re j=1;j<=n+1;j++)
    			scanf("%lf",&a[i][j]);
    	solve();
    	for(re i=1;i<=n;i++)
    	{
    		D ans=a[i][n+1]/a[i][i];
    		if(ans==0)
    			printf("x%d=0\n",i);
    		else
    			printf("x%d=%.2lf\n",i,ans);
    	}
    	return 0;
    }
  • 相关阅读:
    Web防止button按钮点击多次
    缓存
    A标签跳转链接并修改样式
    省、市、区 三级联动
    ASP.NET的OnClientClick与OnClick事件
    ASP:CheckBox获取前台的checked的属性
    c#字符串大小写转换
    C# Base64编码
    自定义滚动条样式 -webkit-scrollbar
    代码 三角
  • 原文地址:https://www.cnblogs.com/WindZR/p/14752134.html
Copyright © 2020-2023  润新知