在我们开始之前,请理解我是ruby和计算机编程的初学者,我没有先验知识,需要编程是最基本的基础,否则我无法理解。我现在正在做一个学校的项目,被卡住了。
我必须为矩阵a创建一个ruby代码,该矩阵a有n行n列,其值为[2,1]
[2,1,0,0,0]
[1,2,1,0,0]
[0,1,2,1,0]
[0,0,1,2,1]
我做了一个代码,但不知道为什么它是错误的,在哪里…请帮助! !
def make1d(n)
a = Array.new(n)
for i in 0..(n-1)
a[i] = 0
end
a
end
def make2d(height,width)
a = Array.new(height)
for i in 0..(height-1)
a[i] = make1d(width)
end
a
end
def matrixa(n)
a=make2d(n,n)
for k in 0..n-2
a[k][k]=2
a[k+1][k]=1
a[k][k+1]=1
a[n-1][n-1]=2
end
a
end
Ruby有一些很好的特性可以利用。例如,Array.new
使用一个块(do ... end
)来指定一个默认值。这个块获取当前索引作为参数(do |index| ... end
)。非常适合这个场景!
你的逻辑似乎很复杂,只是在对角线上设置值。如果你后退一步,如果你只看行和列下标,对角线有什么特别之处?对,它们是相等的。如果你向右/左移动一个对角线,那么所有的row和col索引都将差一个,以此类推。
我是这样写代码的:
Array.new(n) do |row|
Array.new(n) do |col|
case row - col
when -1 then 1
when 0 then 2
when 1 then 1
else 0
end
end
end
或者你可以让它更短,也处理一般情况。只需将2
替换为您想要的值,或将其作为函数参数
Array.new(n) do |row|
Array.new(n) do |col|
[2 - (row - col).abs, 0].max
end
end