0

私のコードは「6 24 24 24 24 28 496」と出力します。24秒いらない どうすればこの問題を解決できますか?

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=24との出力が得られます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 に答える