0

我正在从 projecteuler.com 做一个问题。问题是这样的:

如果我们列出所有小于 10 且是 3 或 5 的倍数的自然数,我们会得到 3、5、6 和 9。这些倍数的和是 23。求出 1000 以下的所有 3 或 5 的倍数之和。

我想为每个 3 和 5 创建最多 1000 个的倍数数组并将它们合并,这不会给我留下重复项(所以我不需要调用array.uniq)。我写的是这样的:

def get_range(range, step)
  ret = []
  range.step(step) { |i| ret << i }
  return ret
end
p get_range(0..1000, 3) | get_range(0..1000, 5)

结果如下:

[0、3、6、9、12、15、18、21、24、27、30、33、36、39、42、45、48、51、54、57、60、63、66、69、72 , 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147 , 150, 153, 156, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222 , 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294, 297 , 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, 372 , 375, 378, 381, 384, 387, 390, 393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447 , 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522 , 525, 528, 531, 534,537、540、543、546、549、552、555、558、561、564、567、570、573、576、579、582、585、588、591、594、597、600、603、606、609、 612、615、618、621、624、627、630、633、636、639、642、645、648、651、654、657、660、663、666、669、672、675、678、681、684、 687、690、693、696、699、702、705、708、711、714、717、720、723、726、729、732、735、738、741、744、747、750、753、756、759、 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, 816, 819, 822, 825, 828, 831, 834, 837、840、843、846、849、852、855、858、861、864、867、870、873、876、879、882、885、888、891、894、897、900、903、906、909、 912、915、918、921、924、927、930、933、936、939、942、945、948、951、954、957、960、963、966、969、972、975、978、981、984、 987, 990, 993, 996, 999, 5, 10, 20, 25, 35, 40, 50, 55, 65, 70, 80, 85, 95, 100, 110, 115, 125, 130, 140,145, 155, 160, 170, 175, 185, 190, 200, 205, 215, 220, 230, 235, 245, 250, 260, 265, 275, 280, 290, 295, 305, 310, 320, 325, 335, 340, 350, 355, 365, 370, 380, 385, 395, 400, 410, 415, 425, 430, 440, 445, 455, 460, 470, 475, 485, 490, 500, 505, 515, 520, 530, 535, 545, 550, 560, 565, 575, 580, 590, 595, 605, 610, 620, 625, 635, 640, 650, 655, 665, 670, 680, 685, 695, 700, 710, 715, 725, 730, 740, 745, 755, 760, 770, 775, 785, 790, 800, 805, 815, 820, 830, 835, 845, 850, 860, 865, 875, 880, 890, 895、905、910、920、925、935、940、950、955、965、970、980、985、995]580, 590, 595, 605, 610, 620, 625, 635, 640, 650, 655, 665, 670, 680, 685, 695, 700, 710, 715, 725, 730, 740, 745, 755, 760, 770, 775, 785, 790, 800, 805, 815, 820, 830, 835, 845, 850, 860, 865, 875, 880, 890, 895, 905, 910, 920, 925, 935, 940, 950, 955、965、970、980、985、995]580, 590, 595, 605, 610, 620, 625, 635, 640, 650, 655, 665, 670, 680, 685, 695, 700, 710, 715, 725, 730, 740, 745, 755, 760, 770, 775, 785, 790, 800, 805, 815, 820, 830, 835, 845, 850, 860, 865, 875, 880, 890, 895, 905, 910, 920, 925, 935, 940, 950, 955、965、970、980、985、995]

这是第一个数组。如果我交换范围的顺序,那么我得到的数组是 5 的倍数。我在 IRB 上尝试了这样的事情:

[1,3,5] | [3, 5, 7]
# => [1, 3, 5, 7]

我是否遗漏了什么,我只是发疯了,还是我遇到了 Ruby 中的错误?

4

1 回答 1

2

你的数组是正确的。它包含 35 的倍数。看最后。它只是没有排序。

于 2013-02-14T12:07:00.490 回答