洛谷 P3389 高斯消元模板题

高斯消元模板(求多元一次线性方程的解)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define N 105
using namespace std;
int n;
double date[N][N],ans[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
	    for(int j=1;j<=n+1;j++)
	    {
	    	scanf("%lf",&date[i][j]);
	    	date[i][j]*=1.00;//转化为浮点数 
		}	
		double tmp=date[i][1];
		for(int j=1;j<=n+1;j++)
		    date[i][j]=date[i][j]*1.0/tmp;//将第一项化为1 
	}
	for(int i=1;i<=n;i++)
	{
		if(date[i][i]==0)
		{
			printf("No Solution\n");return 0;
		}
		for(int j=i+1;j<=n+1;j++) date[i][j]/=date[i][i];//将对角线化为1 
		date[i][i]=1.0;
		for(int j=i+1;j<=n;j++)//将下三角化为0 
		{
			for(int k=i+1;k<=n+1;k++)
			     date[j][k]-=date[i][k]*date[j][i];
			date[j][i]=0;
		}  
	}
	for(int i=n;i;i--)//求ans; 
	{
		double opt=date[i][n+1];
		for(int j=i+1;j<=n;j++)
		     opt-=ans[j]*date[i][j];
		ans[i]=opt;
	}
	for(int i=1;i<=n;i++) printf("%.2lf\n",ans[i]);
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值