我正在尝试尽快完成。我不知道如何将所有除数放入数组中,然后对数组进行排序。
我已经优化了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.
看起来您正在做的是这样:
因此对于输入12,您的输出可能看起来像:
2
6
3
4
一种简单的调整方法是使用两个列表作为答案:第一个列表将按升序记录小于sqrt(input)的因子,第二个列表将按降序记录大于sqrt(input)的因子。然后,要按顺序打印它们,只需按顺序打印第一个列表的内容,然后以相反的顺序跟进第二个列表的内容。