宋壬初吧 关注:25贴子:419
  • 3回复贴,共1

高斯消元程序

收藏回复

  • 221.194.73.*
program gaosi;
const maxn=300;
var i,j,k,l,m,n:longint;
a:array[1..maxn,1..maxn] of double;
ur,uc:array[1..maxn] of boolean;
row,col:array[1..maxn] of longint;
x:array[1..maxn] of double;
procedure enter;
begin
read(n);
for i:=1 to n do
for j:=1 to n+1 do
read(a[i,j]);
end;
procedure main;
var i,j,k:longint;
pivot,tmp:double;
begin
for k:=1 to n do
begin
pivot:=0;
for i:=1 to n do
for j:=1 to n do
if not ur[i] then
if not uc[j] then
if a[i,j]>pivot then
begin
pivot:=a[i,j];
row[k]:=i;
col[k]:=j;
end;
if pivot=0 then
begin
writeln('Many Answers!');
halt;
end;
ur[row[k]]:=true;
uc[col[k]]:=true;
for i:=1 to n+1 do
a[row[k],i]:=a[row[k],i]/pivot;
for i:=1 to n do if i<>row[k] then
begin
tmp:=a[i,col[k]];
for j:=1 to n+1 do
a[i,j]:=a[i,j]-tmp*a[row[k],j];
end;
end;
for i:=1 to n do
x[col[i]]:=a[row[i],n+1];
end;
procedure print;
var i:longint;
begin
for i:=1 to n do writeln('x',i,'=',x[i]:0:4);
end;
begin
enter;
main;
print;
end.


1楼2009-10-06 08:35回复
    • 221.194.73.*
    var i,j,k,l,n,p,q,r,s,t:longint;
    a,m:array[1..1000] of longint;
    src,mi:int64;
    function exdcg(a,b:longint;var x,y:longint):longint;
    var t:longint;
    begin
    if b=0 then
    begin
    x:=1;
    y:=0;
    exit(a);
    end;
    exdcg:=exdcg(b,a mod b,x,y);
    t:=x;
    x:=y;
    y:=t-(a div b)*y;
    end;
    function china_left:int64;
    begin
    src:=1;
    for i:=1 to n do src:=src*m[i];
    china_left:=0;
    for i:=1 to n do
    begin
    mi:=src div m[i];
    exdcg(mi,m[i],p,q);
    china_left:=(china_left+p*mi*a[i]) mod src;
    end;
    end;
    begin
    read(n);
    for i:=1 to n do read(a[i],m[i]);
    writeln(china_left);
    end.


    2楼2009-10-06 08:42
    回复