顺时针从外到内打印数字矩阵


# 打印数字矩阵到标准输出。
# 按顺时针方向,从外到内打印矩阵。起点是矩阵的左上角。

class Matrix
def initialize(width)
@n = 0
@width = width #矩阵的宽度

# 创建二维数组
@square = Array.new(@width) do
Array.new(@width, 0)
end
end

# 打印矩阵
def print_matrix
@square.each do |line|
line.each do |n|
printf("%-3d", n)
end
puts
end
end

# 填充矩阵。
# start 遍历的起点
def fill_in_the_matrix(start)

# 结束递归的条件
return if start > (@width-1)/2

#从左到右遍历
start.upto(@width-start-1) do |i|
@square[start][i] = @n += 1
end

#从上到下遍历
(start+1).upto(@width-start-1) do |i|
@square[i][@width-start-1] = @n += 1
end

#从右到左遍历
(@width-start-2).downto(start) do |i|
@square[@width-start-1][i] = @n += 1
end

#从下到上遍历
(@width-start-2).downto(start+1) do |i|
@square[i][start] = @n += 1
end

fill_in_the_matrix(start+1)
end
end

m = Matrix.new(ARGV[0].to_i)
m.fill_in_the_matrix(0)
m.print_matrix
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值