簡體   English   中英

如何在紅寶石中單行計算1到9

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM