pascal 求 n 个数的最大公约数 Program gongyuemax(input,output); Var x,N,s,i,y:integer; procedure gon
pascal高手们看看哪里错了如打入24854结果咋是48?Programgongyuemax(input,output);Varx,N,s,i,y:integer;pr...
pascal高手们看看 哪里错了 如 打入 2 48 54 结果咋是48?
Program gongyuemax(input,output);
Var
x,N,s,i,y:integer;
procedure gongyue(m:integer; var n:integer);
var
i,j:integer;
begin
for i:=n downto 1 do
begin
if n mod i=0 then
begin
if m mod i=0 then
n:=i;
break;
end;
end;
end;
Begin
assign(input,'pact.in');
reset(input);
assign(output,'pact.out');
rewrite(output);
readln(N);
read(x);
y:=x;
while not eof do
begin
read(x);
gongyue(x,y);
end;
write(y);
close(input); close(output);
End. 展开
Program gongyuemax(input,output);
Var
x,N,s,i,y:integer;
procedure gongyue(m:integer; var n:integer);
var
i,j:integer;
begin
for i:=n downto 1 do
begin
if n mod i=0 then
begin
if m mod i=0 then
n:=i;
break;
end;
end;
end;
Begin
assign(input,'pact.in');
reset(input);
assign(output,'pact.out');
rewrite(output);
readln(N);
read(x);
y:=x;
while not eof do
begin
read(x);
gongyue(x,y);
end;
write(y);
close(input); close(output);
End. 展开
4个回答
展开全部
procedure gongyue(m:integer; var n:integer);
var
i,j:integer;
begin
for i:=n downto 1 do
begin
if n mod i=0 then
begin
--> if (m mod i=0) and (n mod i=0) then 这里有问题,小于n的数又不都是n的约数,应该像这样吧n也判断一下
n:=i;
break;
end;
end;
end;
=========你的第二关程序======================
for i:=n downto 1 do
begin
if n mod i=0 then
begin
if m mod i=0 then
--> begin {if后面你没有begin/end..第一次n mod i=0就会break..以后码代码仔细点....................................}
n:=i;
break;
end;
end;
end;
另外,一般求公约数都用辗转相除法的。。你这样写麻烦了。。而且跑的满,如果n=100000,每个元素在1~100000范围内你就不知道什么时候才能出解了,以下是辗转相除的程序
var
x,n,s,i,y,k:integer;
function gcd(a,b:longint):longint;
begin
if a mod b=0 then exit(b)
else exit(gcd(b,a mod b));
end;
begin
readln(N);
read(x);
y:=x;
for k:=1 to n-1 do
begin
read(x);
y:=gcd(x,y);
end;
write(y);
end.
var
i,j:integer;
begin
for i:=n downto 1 do
begin
if n mod i=0 then
begin
--> if (m mod i=0) and (n mod i=0) then 这里有问题,小于n的数又不都是n的约数,应该像这样吧n也判断一下
n:=i;
break;
end;
end;
end;
=========你的第二关程序======================
for i:=n downto 1 do
begin
if n mod i=0 then
begin
if m mod i=0 then
--> begin {if后面你没有begin/end..第一次n mod i=0就会break..以后码代码仔细点....................................}
n:=i;
break;
end;
end;
end;
另外,一般求公约数都用辗转相除法的。。你这样写麻烦了。。而且跑的满,如果n=100000,每个元素在1~100000范围内你就不知道什么时候才能出解了,以下是辗转相除的程序
var
x,n,s,i,y,k:integer;
function gcd(a,b:longint):longint;
begin
if a mod b=0 then exit(b)
else exit(gcd(b,a mod b));
end;
begin
readln(N);
read(x);
y:=x;
for k:=1 to n-1 do
begin
read(x);
y:=gcd(x,y);
end;
write(y);
end.
展开全部
procedure要改一改。
procedure gongyue(m:integer;var n:integer);
var r:integer;
begin
while n<>0 do
begin
r:=m mod n;
m:=n;
n:=r;
end;
n:=m;//把最大公约数赋给n。
end;
procedure gongyue(m:integer;var n:integer);
var r:integer;
begin
while n<>0 do
begin
r:=m mod n;
m:=n;
n:=r;
end;
n:=m;//把最大公约数赋给n。
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错了2点:1、eof没定义成布尔型;
2、子程序和主程序都有i ,电脑可能误解了。
2、子程序和主程序都有i ,电脑可能误解了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询