我如何使弗洛伊德三角形形状使用循环



我需要Floyd三角的输出:

1
0 1
1 0 1
0 1 0 1

我试过了。我不太明白。有人能解释一下其中的逻辑吗?

这是我试过的代码:

k = 0
for i in 1..5 
  for j in 1..5 
    if (i%2)==0; 
      k = (j%2==0) ? 1:0; 
    else; 
      k = (j%2==0) ? 0:1; 
      puts k,''; 
    end
  end
  puts
end

这里的主要问题是,为了获得输出的"三角形"形状,您需要将内部循环从1递增到i,而不是从1递增到5。

k = 0
for i in 1..5 
  for j in 1..i
    if (i%2)==0
      k = j + 1
    else
      k = j
    end
    print "#{k%2} "
  end
  puts
end

这是一个单行方法:

5.times {|line| puts (line + 1).times.with_object(""){|num, str| (num + line).even? ? (str << " 1 ") : (str << " 0 ") } }

写得更清楚:

lines = 5
lines.times do |line|
  str = ""
  line = line + 1 # 5.times runs from 0 to 4 and we need 1 to 5
  line.times do |num|
    # the condition is a bit different because I changes the code a bit
    if (line + num).even?
      str << " 0 "
    else
      str << " 1 "
    end
  end
  puts str
end

好的,下面应该工作,但我希望它是可读的。如果你需要更多的解释或有具体的问题,请告诉我

i = 1
while i <= 4 do
    if i%2 > 0
        output = 1
    else
        output = 0
    end
    j = 1
    while j <= i do
         print( "#{output} " )
         if output == 1
             output = 0
         else 
            output = 1
         end
         j+=1
    end
    print( "n" )
    i+=1
end

您可以尝试下面的代码来获得您期望的输出:

k = 0
for i in 1..4
  for j in 1..i  // inner loop code runs i times for each outer loop iteration
    if (i%2)==0; 
       k = (j%2==0) ? 1:0; 
    else; 
       k = (j%2==0) ? 0:1; 
    end
    print k,' '; 
   end
   puts
end

点击这里查看输出

你也可以通过这个链接了解for循环

首选ruby方式:

layers = 4  # Change to as many layers as you want
layers.times do |i|  # i starts from 0
  (i + 1).times do |j|  # j also starts from 0
    print (i + j + 1) & 1, ' '
  end
  puts
end

for方式:

layers = 4
for i in 0...layers
  for j in 0...(i + 1)
    print (i + j + 1) & 1, ' '
  end
  puts
end

最新更新