zoukankan      html  css  js  c++  java
  • 高斯消元板子

    1.可以判断有无解

    #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;
    }
  • 相关阅读:
    十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
    2.3 摄像头驱动_vivi驱动程序分析
    3.1 wifi网卡RT3070在S3C2440的移植和使用
    项目简介
    2.2 vivi虚拟视频驱动测试
    2.1 摄像头V4L2驱动框架分析
    LCD驱动程序编写
    LCD驱动程序
    1. Linux内核的配置与裁减:
    第5章 docker run、exec和attach使用和区别
  • 原文地址:https://www.cnblogs.com/WindZR/p/14752142.html
Copyright © 2011-2022 走看看