加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Ruby中创建一个方形乘法表

发布时间:2020-12-17 01:36:46 所属栏目:百科 来源:网络整理
导读:我在接受采访时得到了这个问题并得到了几乎所有答案,但最后一部分却陷入困境.例如,如果我想获取5的乘法表,我想让输出格式如下: 1,2,3,4,52,6,8,103,9,12,154,16,205,10,15,20,25 我对此的回答是: def make_table(n) s = "" 1.upto(n).each do |i| 1.upto(n
我在接受采访时得到了这个问题并得到了几乎所有答案,但最后一部分却陷入困境.例如,如果我想获取5的乘法表,我想让输出格式如下:

1,2,3,4,5
2,6,8,10
3,9,12,15
4,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)的输出是:

"12345n246810n3691215n48121620n510152025n"

我尝试过使用数组的变体,但我得到了类似的输出.

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

解决方法

您可以使用map和join在一行中获取String:

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,25

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

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

它输出:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读