【发布时间】:2015-03-10 13:59:11
【问题描述】:
我有一个以下"bars and stars" 算法,用 Python 实现,它将所有的和分解打印到 3 个 bin 中,总和从 0 到 5。 我想概括我的代码,以便它适用于 N 个 bin(其中 N 小于最大总和,即此处为 5)。 模式是,如果您有 3 个 bin,则需要 2 个嵌套循环,如果您有 N 个 bin,则需要 N-1 个嵌套循环。
有人能想出一种通用的写法,可能不使用循环吗?
# bars and stars algorithm
N=5
for n in range(0,N):
x=[1]*n
for i in range(0,(len(x)+1)):
for j in range(i,(len(x)+1)):
print sum(x[0:i]), sum(x[i:j]), sum(x[j:len(x)])
【问题讨论】:
-
这是一个实际问题还是只是一个脑筋急转弯?后者不适合 SO
-
@Tim:为什么不呢?如果 OP 有一个编程问题,我们为什么不尝试回答呢?
-
@TimCastelijns 这显然是一个问题:我想推广我的算法以使用 N 个 bin(目前它适用于三个)。
-
@Kevin 我认为 Tim 的意思是它可能在编程谜题和代码高尔夫之类的地方更热门。 OP——定义“无循环”——你的意思是不使用
for或while吗?sum的本质需要某种迭代,即使从你的角度来看它只是在幕后。 -
好吧,很公平。
here is a little brain teaser让我有点困惑