如何找到数字的除数并按升序打印出来?

问题描述 投票:0回答:1

我正在尝试尽快完成。我不知道如何将所有除数放入数组中,然后对数组进行排序。

我已经优化了for循环-它以sqrt(n)结尾。

我也重构了我的代码,但是它仍然没有通过所有测试

type  output = array of longint; 
var
    grater,lower: output; 
    n,i,v,counter:longint; 
begin
    read(n);
    setLength(grater, round(Sqrt(n)));
    setLength(lower, round(Sqrt(n)));
    counter:= 0;

    for i:=1 to round(Sqrt(n)) do 
    begin

        if (n mod i = 0) then
        begin
            if i>round(Sqrt(n)) then
                grater[counter]:= i
            else 
                lower[counter]:=i;
            if n div i>round(Sqrt(n)) then
                grater[counter]:= n div i
            else 
                lower[counter]:=n div i;
            counter:= counter +1;
        end;   
    end;

    for v:=0 to Length(lower) do
    begin
       if (lower[v] <> 0) then writeln(lower[v]);
    end;
    for v:=Length(grater)-1 downto 0 do
    begin
       if grater[v] <> 0 then writeln(grater[v]);
    end;
end.
algorithm pascal
1个回答
2
投票

看起来您正在做的是这样:

  1. 检查从2到sqrt(n)的所有整数
  2. 如果输入可被整数整除,则记录整数和(输入/整数)

因此对于输入12,您的输出可能看起来像:

2
6
3
4

一种简单的调整方法是使用两个列表作为答案:第一个列表将按升序记录小于sqrt(input)的因子,第二个列表将按降序记录大于sqrt(input)的因子。然后,要按顺序打印它们,只需按顺序打印第一个列表的内容,然后以相反的顺序跟进第二个列表的内容。

© www.soinside.com 2019 - 2024. All rights reserved.