ruby - 在 Ruby 中制作一个方形乘法表

标签 ruby

我在面试中遇到了这个问题,几乎一路都找到了答案,但卡在了最后一部分。例如,如果我想获得 5 的乘法表,我希望输出的格式如下:

1, 2, 3, 4, 5
2, 4, 6, 8, 10
3, 6, 9, 12, 15
4, 8, 12, 16, 20
5, 10, 15, 20, 25

我的回答是:

def make_table(n)
  s = ""
  1.upto(n).each do |i|
    1.upto(n).each do |j|
      s += (i*j).to_s
    end
    s += "\n"
  end
  p s
end

但是 make_table(5) 的输出是:

"12345\n246810\n3691215\n48121620\n510152025\n"

我尝试了数组的变体,但我得到了类似的输出。

我错过了什么或者我应该如何考虑问题的最后一部分?

最佳答案

您可以使用 map 和 join 在一行中获取字符串:

n = 5 
puts (1..n).map { |x| (1..n).map { |y| x * y }.join(', ') }.join("\n")

它遍历行 (x=1, x=2, ...)。对于每一行,它遍历单元格 (y=1, y=2, ...) 并计算 x*y。它使用 , 连接一行中的每个单元格,并使用换行符连接表格中的每一行:

1, 2, 3, 4, 5
2, 4, 6, 8, 10
3, 6, 9, 12, 15
4, 8, 12, 16, 20
5, 10, 15, 20, 25

如果你想保持逗号对齐,你可以使用 rjust :

puts (1..n).map { |x| (1..n).map { |y| (x * y).to_s.rjust(3) }.join(',') }.join("\n")

输出:

  1,  2,  3,  4,  5
  2,  4,  6,  8, 10
  3,  6,  9, 12, 15
  4,  8, 12, 16, 20
  5, 10, 15, 20, 25

你甚至可以在对齐逗号之前计算 n**2 的宽度:

n = 11
width = Math.log10(n**2).ceil + 1
puts (1..n).map { |x| (1..n).map { |y| (x * y).to_s.rjust(width) }.join(',') }.join("\n")

输出:

   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11
   2,   4,   6,   8,  10,  12,  14,  16,  18,  20,  22
   3,   6,   9,  12,  15,  18,  21,  24,  27,  30,  33
   4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44
   5,  10,  15,  20,  25,  30,  35,  40,  45,  50,  55
   6,  12,  18,  24,  30,  36,  42,  48,  54,  60,  66
   7,  14,  21,  28,  35,  42,  49,  56,  63,  70,  77
   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  88
   9,  18,  27,  36,  45,  54,  63,  72,  81,  90,  99
  10,  20,  30,  40,  50,  60,  70,  80,  90, 100, 110
  11,  22,  33,  44,  55,  66,  77,  88,  99, 110, 121

关于ruby - 在 Ruby 中制作一个方形乘法表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053778/

相关文章:

Ruby 无法加载 JSON gem?

ruby - 如何让 Ruby 找到原生库?

ruby-on-rails - Sinatra、Rails 和 Rack - 用户/ session 管理

ruby - Checkinstall 无法生成 Ruby 1.9.2 包

ruby - 用 puppet 设置环境变量

ruby-on-rails - Rails 4 - Resque 后台作业中的印象派

ruby - 在文件名末尾插入字符(扩展名之前)?

ruby-on-rails - 基于更改的属性值查询 Rails 模型

ruby-on-rails - 使用 JSON Rails 创建多个对象

ruby - 基本 If/Else 语句问题