0

我的代码打印“6 24 24 24 24 28 496”。我不想要24s。我怎么解决这个问题?

program perfect;
uses crt;
var i,number,temp:integer;

begin
    clrscr;
    for number:=2 to 999 do begin
        temp:=1;
        for i:=2 to Trunc(number/2) do begin
            if (number mod i = 0) then
                temp:=temp+i;
                if(temp=number) then
                    writeln(number);
        end;
    end;
    readln;
end.
4

2 回答 2

2

我认为,您需要将if(temp=number)零件从内for循环中拉出。

由于 1+2+3+4+6+8 是 24,因此您将获得number=24and的输出i=8, 9, 10, 11

于 2012-09-29T19:57:57.263 回答
2

您应该移动 if 语句。代码应该是:

program perfect;
var i,number,temp:integer;
begin
    for number:=2 to 999 do begin
        temp:=1;
        for i:=2 to Trunc(number/2) do begin
            if (number mod i = 0) then
                temp:=temp+i;
                //Instead of here
        end;
                //Here
        if(temp=number) then
                    writeln(number);
    end;
    readln;
end.

在那种形式下它工作正常(我得到了 6,28 和 496)

于 2012-09-29T20:01:09.573 回答