我有以下数据: 的y正Y-Y-N-N-N 这无限重复,例如: 的y正Y-Y-N-N-N-Y-N-Y-Y-N-N-N-Y-N-Y-Y-N-N-N ...
我有5“x”。
“x”只有“y”。
意思是,如果我在上面的循环中分配x,它将是:
y-n-y-y-n-n-n-y-n-y-y-n-n-n
x---x-x-----x-x
我想计算我需要使用多少循环元素来传播5 x,答案是10。
如何使用公式计算它?
答案 0 :(得分:0)
我认为你所说的是你需要处理无限列表的前10个元素以得到5个Y,它们匹配/坚持你拥有的5个X.
y-n-y-y-n-n-n-y-n-y-y-n-n-n-y-n-y-y-n-n-n...
x-_-x-x-_-_-_-x-_-x
^
L____ 10 elements read from the infinite list to place the 5 x's.
我还假设你的问题是:给定5 Xs的输入,你需要在无限列表中处理的元素数量是多少,以匹配那些5个X.
您可以使用类似以下伪代码的循环来计算它:
iElementsMatchedCounter = 0
iXsMatchedCounter = 0
iXLimit = 5
strElement = ""
if (InfiniteList.IsEmpty() == false)
{
do
{
strElement = InfiniteList.ReadNextElement()
if (strElement == "y")
{
iXsMatchedCounter += 1
}
iElementsMatchedCounter += 1
} while ( (InfiniteList.IsEndReached() == false) AND (iXsMatchedCounter < iXLimit) )
}
if (iXsMatchedCounter = iXLimit)
then Print(iElementsMatchedCounter)
else Print("End of list reached before all X's were matched!")
上述方法的缺点是您实际上正在阅读无限列表,这可能不是更好。
相反,如果你知道你的列表是相同元素y-n-y-y-n-n-n的无限重复序列,你甚至不需要循环遍历整个列表,而只需操作子列表y-n-y-y-n-n-n。以下算法描述了如何:
鉴于你的开始输入:
然后我们计算出中间结果:
以下步骤应该给出结果:
通常,如果你的子列表ynyynnn没有预先定义,那么你就不能在步骤6中对规则进行硬编码,而是只需要遍历子列表一次来计算Y和元素,类似于上面给出的伪代码。
对于实际代码,您可以使用整数除法和模运算来快速分别执行步骤2和4中的操作。
iQuotient = iNumberOfXs / iNumberOfYsInSubList // COMMENT: here integer division automatically drops the remainder
iPartialLengthOfList = iQuotient * iLengthOfSubList
iPendingXs = iNumberOfXs - (iQuotient * iNumberOfYsInSubList)
// COMMENT: can use modulo arithmetic like the following to calculate iPendingXs
// iPendingXs = iNumberOfXs % iNumberOfYsInSubList
// The following IF statement assumes the sub-list to be y-n-y-y-n-n-n
if (iPendingXs > 1)
then iPendingLengthOfList = iPendingXs + 1
else iPendingLengthOfList = iPendingXs
iResult = iPartialLengthOfList + iPendingLengthOfList