洛谷 P3389 【模板】高斯消元法

29 篇文章 0 订阅
8 篇文章 0 订阅

题目背景

Gauss消元

题目描述

给定一个线性方程组,对其求解

输入输出格式

输入格式:
第一行,一个正整数n

第二至n+1行,每行n+1个整数,为a1,a2…an和b,代表一组方程。

输出格式:
共n行,每行一个数,第i行为xi (保留2位小数)

如果不存在唯一解,在第一行输出”No Solution”.

输入输出样例

输入样例#1:
1
1 1
输出样例#1:
1.00
说明

1<=n<=100, |ai|<=10000, |b|<=10000

分析:
模版题,直接打就好了

代码:

var
 matrix:array [1..500,1..500] of extended;
 r,ans:array [1..500] of extended;
 n,m,i,j,x,y:longint;


procedure find(x:longint);
 var i,tx,j:longint;
 t,max:extended;
begin
 max:=-1; tx:=0;
 for i:=x to n do
  begin
   if abs(matrix[i,x])>max then
   begin max:=abs(matrix[i,x]); tx:=i; end;
  end;
 for j:=x to n do
  begin
   t:=matrix[tx,j]; matrix[tx,j]:=matrix[x,j]; matrix[x,j]:=t;
  end;
 t:=r[x]; r[x]:=r[tx]; r[tx]:=t;
end;

procedure gauss;
 var i,j,k:longint;
     x,q:extended;
begin
 for j:=1 to n do
  begin
   find(j);
   for i:=j+1 to n do
    begin
     q:=matrix[j,j]/matrix[i,j];
     for k:=j to n do
      matrix[i,k]:=matrix[i,k]*q-matrix[j,k];
     r[i]:=r[i]*q-r[j];
    end;
  end;
 for j:=n downto 1 do
  begin
   x:=r[j];
   for k:=j+1 to n do
    x:=x-ans[k]*matrix[j,k];
   if matrix[j,j]=0 then
    begin
     writeln('No Solution');
     halt;
    end;
   ans[j]:=x/matrix[j,j];
  end;
end;

begin
 read(n);
 for i:=1 to n do
 begin
  for j:=1 to n do
   read(matrix[i,j]);
  read(r[i]);
 end;
 gauss;
 for i:=1 to n do
  writeln(ans[i]:0:2);
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值