Algorithm 如何找到一个数字的除数并按升序打印出来?
我正在尽可能快地做这件事。我搞不懂的是如何将所有除数放入数组中,然后对数组进行排序 我已经优化了for循环-它以sqrt(n)结束 我也重构了我的代码,但它仍然没有通过所有的测试Algorithm 如何找到一个数字的除数并按升序打印出来?,algorithm,pascal,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))); setLe
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.
type输出=longint的数组;
变量
较低:输出;
n、 i,v,计数器:longint;
开始
读取(n);
设置长度(格栅,圆形(Sqrt(n));
设置长度(较低,圆形(Sqrt(n));
计数器:=0;
对于i:=1到四舍五入(Sqrt(n))do
开始
如果(n模i=0),则
开始
如果i>round(Sqrt(n)),那么
格栅[计数器]:=i
其他的
下[计数器]:=i;
如果n div i>round(Sqrt(n)),则
格栅[计数器]:=n第一分区
其他的
下[计数器]:=n第i部分;
计数器:=计数器+1;
结束;
结束;
对于v:=0到长度(较低)do
开始
如果(降低[v]0),则写N(降低[v]);
结束;
对于v:=长度(格栅)-1至0 do
开始
如果grater[v]0,则写入n(grater[v]);
结束;
结束。
看起来您正在做的是:
2
6
3
4
调整答案的简单方法是使用两个列表:第一个列表将按升序记录小于sqrt(输入)的因子,第二个列表将按降序记录大于sqrt(输入)的因子。然后,要按顺序打印,只需按顺序打印第一个列表的内容,然后按相反的顺序打印第二个列表的内容。看起来您正在做的是:
2
6
3
4
调整答案的简单方法是使用两个列表:第一个列表将按升序记录小于sqrt(输入)的因子,第二个列表将按降序记录大于sqrt(输入)的因子。然后,要按顺序打印,只需按顺序打印第一个列表的内容,然后按相反的顺序打印第二个列表的内容。这段代码有什么好处?有很多很多在线排序的例子;您如何在排序数组时遇到问题?既然你已经找到了按数字顺序排列的因子(半升序,半降序),你为什么要对它进行排序呢?我对Pascal很陌生,老实说,这不是我最欣赏的语言。我必须做一些家庭作业,这就是其中之一。我不想只是用排序函数粘贴一些代码,我正试着用我的方法来做,为什么不把数字除以因子,得到一棵树,直到得到一个素因子分解?对于v:=0到长度(较低)将产生一个范围错误,因为动态数组的索引是从零到长度-1。你用这段代码得到了什么?有很多很多在线排序的例子;您如何在排序数组时遇到问题?既然你已经找到了按数字顺序排列的因子(半升序,半降序),你为什么要对它进行排序呢?我对Pascal很陌生,老实说,这不是我最欣赏的语言。我必须做一些家庭作业,这就是其中之一。我不想只是用排序函数粘贴一些代码,我正试着用我的方法来做,为什么不把数字除以因子,得到一棵树,直到得到一个素因子分解?对于v:=0到长度(较低)将产生一个范围错误,因为动态数组的索引从零到长度-1。