2008-09-24 49 views

回答

5
x = [2, 5, 8, 33, 58] 
print x.collect {|n| x.collect {|i| (n-i).abs}}.flatten 

我认为那样做。

0

如果你真的想要一个数组而不是一个矩阵,这是O(n^2/2)而不是O(n^2)。

result=[] 
x.each_index{|i| (i+1).upto(x.size-1){|j| result<<(x[i]-x[j]).abs}} 
+0

这仍然是为O(n^2),但随着数量的一半比较。 O(n!)不是你的意思。 – 2008-09-25 01:52:30

0
x.map{|i| x.map{|j| (i-j).abs } } 

给出

[[0, 3, 6, 31, 56], 
[3, 0, 3, 28, 53], 
[6, 3, 0, 25, 50], 
[31, 28, 25, 0, 25], 
[56, 53, 50, 25, 0]]

(这样它的格式与 'PP',而不是放打印出来)

x.map{|i| x.map{|j| (i-j).abs } }.flatten 

给出

[0, 3, 6, 31, 56, 3, 0, 3, 28, 53, 6, 3, 0, 25, 50, 31, 28, 25, 0, 25, 56, 53, 50, 25, 0]

如果你真的想要一个数组