参考another question,我想打印一个数组的循环排列(并计算其数量)。我对这个函数的输入将是数组,跨距和起始值。
我的数组不一定只包含数字。
例如:给定数组X, 1, 2, 3, Y
(5个元素)和跨距3,我将得到
X, 1, 2 // first line
3, Y, X
1, 2, 3
Y, X, 1
2, 3, Y // last line since it would be repeating hereafter.
在这种情况下,计数将为“5”。在许多情况下,计数与元素数量相同,但并不总是如此。使用8个元素和跨距=4,计数为2。使用8个元素和6,计数为4。
数组也可能包含相同的值,如引入/引出和重复的数字。
示例:LEADIN, LEADIN, LEADIN, LEADIN, 1, 1, 2, 2, 3, 3, 4, 4, LEADOUT, LEADOUT
(对于4个引入线,编号1..4重复 *2和2个引出线。总元素计数= 1..4。
其目的是形成一个无限的子集序列,每个子集的步长为1。子集中不能有任何空格。所有元素都必须使用,并且数字必须保持不变。
有了前导,平凡的例子:跨距为2的LI, LI, 1, 2, 3, LO, LO
将为:LI LI | 1 2 | 3 LO | LO LI | LI 1 | 2 3 | LO LO
(7个重复)。
我可能会使用Python来完成这项工作。从循环数组中获取数据没有问题-但我需要找出我需要做多少“移位”。
使用这个简单的函数,我可以“计算”金额,但我会认为有一个公式来做这件事?
def getiterations(elements, stride):
# assuming here that elements > stride
lc = 0
lineno = 0
finished = False
while not finished:
lc = lc+stride # simulate getting N numbers
lineno= lineno+1
if (lc %elements)==0:
finished = True
return lineno
2条答案
按热度按时间klsxnrf11#
你只需要计算最小公倍数,然后除以步长,得到循环排列的个数。
nmpmafwu2#
这里是完整的程序,如果它是有用的任何人。
解决方案,感谢@michael-cao。