[英]How to count 1 to 9 on a single line in ruby
我正在努力弄清楚如何在紅寶石上的單行中循環編號。
x = 0
while x <= 9
puts x
x +=1
end
這會給你
0
1
2
3
4
5
6
7
8
9
每個在不同的行。
但是我想要的是將其放在一行上
01234567891011121314151617181920
也不僅限於0-9,更像是單行中的0到無窮大。
目的是制作一個遵循此圖案的任何大小的三角形。
1
12
123
1234
12345
123456
這些都將在不同的行上。 這里的格式不允許我輸入不同的行。
真的很想解決這個問題。 傷了我的頭。
嘗試這個:
(1..9).each { |n| print n }
puts
您說過您想“制作一個遵循此模式的任意大小的三角形”,因此您不應對該如何做做任何假設。 這有兩種方法。
#1
def print_triangle(n)
(1..n).each.with_object('') { |i,s| puts s << i.to_s }
end
print_triangle(9)
1
12
123
1234
12345
123456
1234567
12345678
123456789
#2
def print_triangle(n)
s = (1..n).to_a.join
(1..n).each { |i| puts s[0,i] }
end
print_triangle(9)
1
12
123
1234
12345
123456
1234567
12345678
123456789
這個解決方案怎么樣:
last_num = 9
str = (1..last_num).to_a.join # create string 123456789
0.upto(last_num-1){ |i| puts str[0..i] } # print line by line
puts (1..9).map(&:to_s).join
關於您的最終目標,有很多(可能更簡單)的方法,但這是一種:
def print_nums k
k.times { |n| puts (1..(n+1)).map { |i| i*10**(n+1-i) }.inject(:+) }
end
print_nums 9
#1
#12
#123
#1234
#12345
#123456
#1234567
#12345678
#123456789
這種方法使用與行號i
有關的單位,數十,數百等生成實際數字。
看一下四行代碼的基本示例:
1
12
123
1234
是相同的:
1*10**0 #=> 1
1*10**1 + 2*10**0 #=> 12
1*10**2 + 2*10**1 + 3*10**0 #=> 123
1*10**3 + 2*10**2 + 3*10**1 + 4*10**0 #=> 1234
在Ruby中可以通過以下方式生成:
(1..1).map { |i| i*10**(1-i) }.inject(:+) #=> 1
(1..2).map { |i| i*10**(2-i) }.inject(:+) #=> 12
(1..3).map { |i| i*10**(3-i) }.inject(:+) #=> 123
(1..4).map { |i| i*10**(4-i) }.inject(:+) #=> 1234
尋找一種模式,我們可以概括並放入一個方法:
def print_nums k
k.times { |n| puts (1..(n+1)).map { |i| i*10**(n+1-i) }.inject(:+) }
end
您可以(並且應該)當然忽略上述所有內容,而只是通過@seph擴展出色的答案
3.times { |i| (1..(i+1)).each { |n| print n }; puts }
#1
#12
#123
如果要從1開始,最簡單的方法
9.times {|n| puts n+1}
嘗試是否要從0開始
10.times {|n| puts n}
如果您想要金字塔格式,這是一種方法
9.times{|c| puts (1..c+1).to_a.join}
這是輸出
2.3.0 :025 > 9.times{|c| puts (1..c+1).to_a.join}
1
12
123
1234
12345
123456
1234567
12345678
123456789
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.