c++ - 提出链表的简单公式

标签 c++ algorithm linked-list

说实话,我已经研究这个问题好几天了。我已经实现了这个函数的困难部分,但现在只剩下一件小事了。我要写的方法是删除链表的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/

相关文章:

python - Facebook 杯飞旋镖编程

c - 当我想打印链接列表值时它发生了变化

java - 两个数字相加链表

c++ - 如何自动并行化堆数组?

C++ "std::string has not been declared"错误

C++ 生成随机 vector

algorithm - token 桶的形式误差是多少,能否标定?

c - 快速排序算法给出段错误

c++ - Eigen 库的 Eigenvalues 目录中的 .h 文件似乎有很多语法错误?

java - 表示工作流的类结构