在 28 张专辑中分发我的硬币 collection

Distributing my coin collection over 28 albums

我有一枚硬币 collection,我想将它 collection 均匀地(或尽可能均匀地)分配到我的相册中。硬币在 353 sheets 中,有 28 张专辑,因此每张专辑需要 12.81 sheets。有 193 个国家,但并非每个国家都拥有相同数量的 sheet。阿富汗有 1 个 sheet,阿尔巴尼亚也有。阿尔及利亚有两个sheet,安道尔和安哥拉都有1个sheet,阿根廷有6个sheet等等。

基本上可以归结为:我有一个 collection 的 193 个号码(每个国家的 sheet 个号码),这些号码需要分成 28 个 collections。每个 collection 的总和应尽可能接近。有两个重要的限制。 collection 的最大数字总和为 15,并且数字的顺序不能更改。这是 collection:

{1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2}

如果我手动完成,结果会是这样的:

1. {1,1,2,1,1,6,1,1} = 14
2. {6,4,1,2} = 13
3. {2,1,1,1,8} = 13
4. {1,1,1,1,1,1,5,1,1} = 13
5. {1,3,1,1,1,1,1,1,2} = 12
6. {2,2,1,2,1,2,2} = 12
7. {2,3,1,2,5} = 13
8. {1,2,1,2,2,4} = 12
9. {1,1,1,1,2,2,1,1,2} = 12
10. {3,1,1,1,2,2,5} = 15
11. {2,2,1,1,1,1,2} = 10
12. {4,2,2,2,1,3} 14
13. {2,3,5,2} = 12
14. {3,2,2,3,2} = 12
15. {1,1,1,1,1,1,1,1,1,2} = 11
16. {3,1,1,1,2,1,3,1} = 13
17. {2,3,1,2,1,3} = 12
18. {1,1,1,2,1,2,1,1,2} = 12
19. {1,3,1,1,2,2,1,2} = 13
20. {3,3,5} = 11
21. {4,1,1,1,3,1,1,1} = 13
22. {2,1,2,2,1,1,2,1,1} = 13
23. {1,1,1,6,1,1} = 11
24. {6,3,1,3} = 13
25. {2,1,1,2,1,3,1,1,1} = 13
26. {1,4,1,1,2,4} = 13
27. {1,1,2,1,3,1,1,3} = 13
28. {3,1,1,1,1,5,1,2} = 15

我真的不知道我应该如何在代码中做到这一点。有人能指出我正确的方向吗?非常感谢!

我同意@Peter Csala 的观点。 这可以通过示例使用 PowerShell 解决。由您决定如何启动此脚本以查看结果。

$x = @(1,1,2,1,1,6,1,1,6,4,1,2,2,1,1,1,8,1,1,1,1,1,1,5,1,1,1,3,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,3,1,2,5,1,2,1,2,2,4,1,1,1,1,2,2,1,1,2,3,1,1,1,2,2,5,2,2,1,1,1,1,2,4,2,2,2,1,3,2,3,5,2,3,2,2,3,2,1,1,1,1,1,1,1,1,1,2,3,1,1,1,2,1,3,1,2,3,1,2,1,3,1,1,1,2,1,2,1,1,2,1,3,1,1,2,2,1,2,3,3,5,4,1,1,1,3,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,6,1,1,6,3,1,3,2,1,1,2,1,3,1,1,1,1,4,1,1,2,4,1,1,2,1,3,1,1,3,3,1,1,1,1,5,1,2)

$sum = 0
$cols = [System.Collections.Generic.List[System.Collections.Generic.List[System.Int32]]]::new()
$col = [System.Collections.Generic.List[System.Int32]]::new();
for($i=0; $i -lt $x.Count - 1; $i++) {
    $sum += $x[$i]
    if ($sum + $x[$i+1] -gt 15) {
        $cols.Add($col)
        $col = [System.Collections.Generic.List[System.Int32]]::new();
        $sum = 0;
    } else {
        $col.Add($x[$i])
    }
}

for($i=0; $i -lt $cols.Count; $i++) {
    Write-Host "Collection $i : $($cols[$i] -join ',')"
}