新手问题 如何用 ruby 打印半菱形,具体如下图

LPFpengfei · 2019年02月14日 · 最后由 luikore 回复于 2019年02月19日 · 2005 次阅读

用 ruby 打印下面的图形,要求先递增在递减,循环往复

*
**
***
****
*****
****
***
**
*
**
***
****
*****
****
***
**
*
.......
def puts_abc(num)
  return '请输入大于0的数' if num <= 0
  array_1 = Array.new(num){|index| index + 1 }
  array_2 = []
  array_1.in_groups_of(4, false) {|group| array_2 << group}
  array_2.each_with_index do |array_3, index|
    if index.even?
      m = 1
      array_3.size.times do |a|
        puts '*' * m
        m = m + 1
      end
    else
      m = 5
      array_3.size.times do |n|
        puts '*' * m
        m = m - 1
      end
    end
  end
end

puts_abc(20)

还有没有更优雅点的

2 楼 已删除
str = '*
**
***
****
*****
****
***
**
*
'
puts str

拿去用吧,清晰明了。绝对不存在看不懂的问题


def itoa(num)
    arr = (1...2*num).map do |e|
        i = e > num ? 2 * num - e : e
    end
    arr.shift
    arr.cycle

end
arrr = itoa 5
counter = 0

str = "*"
puts str
loop do
    counter += 1
    puts str * arrr.next     
    break if counter == 20
end
def print_half_diamond(lines, width: 5)
  cycle = width * 2 - 2
  return lines.times { puts '*' } if cycle.zero?
  lines.times do |line|
    index = line % cycle + 1
    count = index <= width ? index : width * 2 - index
    puts '*' * count
  end
end

输入是什么?输出是什么?你别光给输出不给输入啊。

如果只是要输出一个宽度为输入的半菱形的话

num = 4
row_sizes = 2.upto(num).to_a + (num-1).downto(1).to_a
puts '*' # 第一行
row_sizes.each {|width| puts '*' * width} # 重复多遍来反复输出

# => *
#**
#***
#****
#***
#**
#*
lyb124553153 回复

厉害了。。。。

msg7086 回复

这本身就是打印菱形的一个变种编程题,要求输入一个行数,打印宽度不超过 5 的半菱形。。。。。。。。。。。

3 行代码搞定:

i=5
loop do
   i=0 if i > 9
   puts '*' * (1+(i%10-5).abs)
   i+=1
end
10 楼 已删除
def f n
  [*(1..n), *(1...n).reverse_each].cycle {|n| puts '*' * n }
end
LPFpengfei 关闭了讨论。 01月29日 16:38
需要 登录 后方可回复, 如果你还没有账号请 注册新账号