说实话,我已经研究这个问题好几天了。我已经实现了这个函数的困难部分,但现在只剩下一件小事了。我要写的方法是删除链表的blockSize的每第N block 。因此,如果我有一个大小为 7 的链表 {1,2,3,4,5,6,7}
, N=2
, blockSize=2
,我想删除每个第 N(2nd) 个大小为 blockSize(2) 的 block ,因此删除 3,4,7。现在,为了让 for 循环正常工作,我需要为我创建的名为 numBlocksRemoved 的 int 值编写一个表达式。它计算要删除的 block 的总数。在本例中,它将是 2。这是我所拥有的:
numBlockRemoved=(size/blockSize)/N;
但是,这仅在有时数字看起来不错时才有效。如果我有 size=8,N=2, blockSize=2
,那么我会得到 numBlockRemoved=2
,这是正确的。但是,对于上面的示例,我输入的 int 值是 1,这是不正确的。我想要 2。我已经想了很长时间了,这很荒谬。我只是想不出适用于 numBlockRemoved 的公式。有什么想法吗?
最佳答案
尝试
floor(ceil(size/blockSize)/N)
floor(ceil(7/2)/3) = 1
floor(ceil(7/2)/2) = 2
floor(ceil(8/2)/2) = 2
您拥有的 block 数:
blocks = ceil(size/blockSize)
ceil
因为你不介意未满的 block 。
然后你跳过每一个 N,所以:
floor(blocks/N)
floor
因为您要么计算一个 block ,要么不计算。
关于c++ - 提出链表的简单公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137637/