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

时间:2019-10-31 20:03:35

标签: algorithm pascal

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

我已经优化了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.

1 个答案:

答案 0 :(得分:2)

看来您在做什么:

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

对于输入12,您的输出可能类似于:

2
6
3
4

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