求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1(pascal)program d313;vara,b,g,l:integer;f:text;function gcd(m,n:integer):integer;var r:integer;beginwhile r0 dobeginr:=a mod b;if r=0 thenbegingcd:=b;break;end;a:=b;b:=r;e
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/27 22:42:47
求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1(pascal)program d313;vara,b,g,l:integer;f:text;function gcd(m,n:integer):integer;var r:integer;beginwhile r0 dobeginr:=a mod b;if r=0 thenbegingcd:=b;break;end;a:=b;b:=r;e
求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1(pascal)
program d313;
var
a,b,g,l:integer;f:text;
function gcd(m,n:integer):integer;
var r:integer;
begin
while r0 do
begin
r:=a mod b;
if r=0 then
begin
gcd:=b;
break;
end;
a:=b;
b:=r;
end;
end;
function lcm(m,n:integer):integer;
var g,a,b:integer;
begin
a:=m;
b:=n;
g:=gcd(a,a);
lcm:=(m*n)div g;
end;
procedure assignfile;
begin
assign(f,'d313.out');
rewrite(f);
end;
begin
assignfile;
for a:=1 to 666 do
begin
b:=667-a;
g:=gcd(a,b);
l:=lcm(a,b);
if l div g=120 then
writeln(f,a,',',b);
end;
close(f);
end.
为什么会不出结果?
.
求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1(pascal)program d313;vara,b,g,l:integer;f:text;function gcd(m,n:integer):integer;var r:integer;beginwhile r0 dobeginr:=a mod b;if r=0 thenbegingcd:=b;break;end;a:=b;b:=r;e
让我来点出你是个初学者的明显的特征:
第一,你的程序的GCD还有LCM重新定义了A和B以及G,这样主过程里面的变量值是多少?函数里面变量值是多少?变量重名会造成很严重的后果
第二,你的程序真长,看得我头疼
算了.你的程序我改完以后可以运行了.我没有输出重复的
var a,b:integer;
function gcd(m,n:integer):longint; //m>=n
begin
if n=0 then exit(m) else exit(gcd(n,m mod n));
end;
function lcm(m,n:integer):longint;
begin
exit((m*n) div gcd(m,n));
end;
procedure assignfile;
begin
assign(output,'d313.out');
rewrite(output);
end;
begin
assignfile;
for a:=1 to 333 do
begin
b:=667-a;
if lcm(b,a) div gcd(b,a)=120 then writeln(a,' ',b);
end;
close(output);
end.
顺便说下...你们老师难道没有教育你们PASCAL的过程要尽量不新开变量么...