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