在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |