Java 中的蛋糕数

2025年3月17日 | 阅读 7 分钟

在本节中,我们将学习如何在 Java 中找到蛋糕数。蛋糕数 CKn 表示用 n 个平面切割将蛋糕分割成最多份数。饼干数的三个维度版本就是蛋糕数。

一般来说,

CKn = (n3 + 5 *n + 6) / 6 其中 n >= 0

因此,

对于 n = 0,

CK0 = (03 + 5 * 0 + 6) / 6 = (6) / 6 = 6 / 6 = 1

对于 n = 1,

CK1 = (13 + 5 * 1 + 6) / 6 = (1 + 5 + 6) / 6 = 12 / 6 = 2

对于 n = 2,

CK2 = (23 + 5 * 2 + 6) / 6 = (8 + 10 + 6) / 6 = 24 / 6 = 4

对于 n = 3,

CK3 = (33 + 5 * 3 + 6) / 6 = (27 + 15 + 6) / 6 = 48 / 6 = 8

对于 n = 4,

CK4 = (43 + 5 * 4 + 6) / 6 = (64 + 20 + 6) / 6 = 90 / 6 = 15

对于 a = 5,

CK5 = (53 + 5 * 5 + 6) / 6 = (125 + 25 + 6) / 6 = 156 / 6 = 26

实施

让我们看看如何实现上述数学公式。请注意以下示例。

文件名: CakeNumberExample1.java

输出

The first 30 cake numbers are: 
1 2 4 8 15 26 42 64 93 130 176 232 299 378 470 576 697 834 988 1160 1351 1562 1794 2048 2325 2626 2952 3304 3683 4090

使用递归

蛋糕数也可以使用递归找到。但是,要通过递归找到蛋糕数,我们必须知道它的递归公式。

CK0 = 1,当 n = 0 时

CK1 = 2,当 n = 1 时

CKn = n + 1C3 + n + 1,当 n >= 2 时

因此,

对于 n = 2

Cake Number in Java

实施

让我们看看如何实现上述数学公式。请注意以下示例。

文件名: CakeNumberExample2.java

输出

The first 30 cake numbers are: 
1 2 4 8 15 26 42 64 93 130 176 232 299 378 470 576 697 834 988 1160 1351 1562 1794 2048 2325 2626 2952 3304 3683 4090

使用迭代

蛋糕数也可以通过迭代找到。我们将使用循环借助二维数组来找到蛋糕数。请注意以下程序。

文件名: CakeNumberExample3.java

输出

The first 30 cake numbers are: 
1 2 4 8 15 26 42 64 93 130 176 232 299 378 470 576 697 834 988 1160 1351 1562 1794 2048 2325 2626 2952 3304 3683 4090

另一种方法

除了上述讨论的方法外,还有一种使用组合计算蛋糕数的方法。请注意以下数学陈述。

CK0 = 1,当

CK1 = 2,当

CK2 = 4,当

CKn = nC3 + nC2 + nC1 + nC0,当 n >= 3 时

因此,

对于 n = 3,

Cake Number in Java

实施

让我们在下面的代码中看看上述公式的递归和迭代实现,以找到蛋糕数。

文件名: CakeNumberExample4.java

输出

The first 30 cake numbers are: 
1 2 4 8 15 26 42 64 93 130 176 232 299 378 470 576 697 834 988 1160 1351 1562 1794 2048 2325 2626 2952 3304 3683 4090 

The first 30 cake numbers are: 
1 2 4 8 15 26 42 64 93 130 176 232 299 378 470 576 697 834 988 1160 1351 1562 1794 2048 2325 2626 2952 3304 3683 4090