java - 如何以 k 种不同的方式组合 n 个元素
问题描述
例如 12 个球和 3 个盒子,我如何使用所有球将列表添加到所有组合中。例如 n 是 12,k 是 3:
- (12,0,0)
- (0,12,0)
- (0,0,12)
- (0,1,11)
- (0,11,1)
- (11,1,0)
- (11,0,1)
- (10,1,1)...
Python、c#、Java……这三种语言中的一种对我来说会很棒。
编辑: 这不是作业。该算法稍后将用于分配。
解决方案
lst, cnt = [], 0
for i in range(13):
for j in range(13 - i):
lst.append((i, j, 12 - j - i))
cnt += 1
print(*lst, sep='\n')
print(f'combinations = {cnt}')
(0, 0, 12)
(0, 1, 11)
(0, 2, 10)
(0, 3, 9)
(0, 4, 8)
(0, 5, 7)
(0, 6, 6)
...
(11, 0, 1)
(11, 1, 0)
(12, 0, 0)
combinations = 91
推荐阅读
- ios - 为什么 UITableViewCell 相互重叠?
- scala - Spark Scala 编码器案例类
- c++ - python3如何使用protobuf的cpp生成代码实现?
- sql - 按月填补日期空白
- windows - Windows Server - 在断开许多 RDP 会话时使用默认 rdp 许可证 2 会使 RD 服务繁忙
- pandas - 在没有 pip 的情况下安装 pandas
- python - Python Dict 覆盖以前的列表
- javascript - 如何处理节点错误“未处理的承诺拒绝”,以便无论如何加载页面?
- java - 使用 Selenium,Java 从 iframe 中的元素获取文本
- c++ - FLTK 回调不接受我的函数指针