两个数组的联合等于第一个数组?

时间:2022-11-20 22:53:58

I am doing a problem from projecteuler.com. The question is this:

我在projecteuler.com上遇到了问题。问题是:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.

如果我们列出10以下是3或5的倍数的所有自然数,我们得到3,5,6和9.这些倍数的总和是23.找到低于1000的3或5的所有倍数的总和。

I thought of creating arrays of multiples for each 3 and 5 up to 1000 and taking the union of them, which doesn't leave me with duplicates (so I don't need to call array.uniq). What I've written is this:

我想为每个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)

This comes out with this result:

结果如下:

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

[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,62 1,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,83​​7,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,5 75,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]

which is the first array. If I swap the order of the ranges, then I get the array with the multiples of 5. I tried something like this on IRB:

这是第一个数组。如果我交换范围的顺序,那么我得到的数字为5的倍数。我在IRB上尝试过类似的东西:

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

Am I missing something, am I just going insane, or have I encountered a bug in Ruby?

我错过了什么,我只是疯了,还是我遇到过Ruby中的错误?

1 个解决方案

#1


2  

Your array is correct. It contains both multiples of 3 and 5. Look at the end. It's just not sorted.

你的阵列是正确的。它包含3和5的倍数。看看结尾。它只是没有排序。

#1


2  

Your array is correct. It contains both multiples of 3 and 5. Look at the end. It's just not sorted.

你的阵列是正确的。它包含3和5的倍数。看看结尾。它只是没有排序。