中心立方体数
问题陈述包括打印 N 的某个正值的第 N 个中心立方体数,该数将是用户输入。
中心立方体数是由一个点包围的同心立方体点层所创建的三维图案中的点数,其中第 i 层的方形面上有 i^2 个点。它相当于立方体内体心立方体图案中的点数,立方体的每个边缘都有 n + 1 个点。
您可以参考维基百科了解中心立方体数的图形表示,这将有助于更好地理解该主题。
中心立方体数序列的第一个数字是 1,表示为中心的一个点。接下来,第二个数字是 9,表示为中心的一个点,周围是立方体的点层,方形面上有 1 个点,使数字为 9。
下一个中心立方体数字遵循类似的模式,表示模式中的点总数。前几个中心立方体数字是1、9、35、91、189、341、559、855……
序列中的每个数字代表由(N-1)个同心立方体层包围的点的三维图案中的点数,其中N是中心立方体数字在序列中的位置。
在这个问题中,我们将得到一个正整数,比如N,我们的任务是找到与给定的N值相对应的中心立方体数字的值。
示例
输入:N = 4 输出:91
解释 - 输入中给出的N值为4。第4个中心立方体数字是91,代表点的总数3-D 图案,其中一个中心点被 3 个同心立方体点层包围。
输入:N=6 输出:341
解释 - 与 N 即 6 对应的中心立方体数的值是 341,表示当中心点被 5 层同心立方体包围时的总点数,其中每个第 i 个立方体在方形面上有 i^2 个点。
让我们尝试理解解决打印第 N 个中心立方体数字问题的算法。
算法
中心立方体数字序列中存在的数字之间存在数学关系。由于每个数字都代表 3-D 图案中的总点数,其中一个中心点被由点形成的立方体的同心层包围。每个第 N 个数字都被 (N-1) 个由点组成的同心立方层所包围。
给出序列中任何第 N 个中心立方数的数学公式是 −
(中心立方数)𝑛 = (𝑛 − 1)3 + 𝑛3
其中,n 是中心立方数在序列中的位置。
当中心的点被 (n-1) 个由点组成的同心立方层所包围时,此公式给出 3-D 图案中的点数。每个第 n 个中心立方数都可以用上述三次方程的形式表示。
让我们试试 n=6 的方程。
因为我们知道第 6 个中心立方数是 341。
将 n=6 代入方程,
(𝑛 − 1)3 + 𝑛3 = (6 − 1)3 + 63 = 125 + 216 = 341,这是第 6 个中心立方数。
因此,我们将使用公式 (𝑛 − 1)3 + 𝑛3 来计算任何正值的第 N 个中心立方数n 在我们的方法中以解决问题。
方法
在我们的方法中,整合公式以找到第 N 个中心立方体数的步骤如下 -
为了计算第 N 个中心立方体数,我们将创建一个函数。
我们将初始化一个变量来存储第 N 个中心立方体数的值。该变量将为 long long 数据类型,以确保 N 值越大,第 N 个中心立方数的值越大。
使用公式 (𝑛 − 1)3 + 𝑛3 ,我们将计算给定 N 值的中心立方数并将其存储在变量中。
返回变量,这是我们需要的输出。
示例
该方法的 C++ 代码 −
//C++ 代码用于打印给定 number 值的第 N 个中心立方体数 #include <bits/stdc++.h> using namespace std; //用于计算第 N 个中心立方体数的函数 long long Nth_number(int N){ //long long 数据类型用于存储较大 N 值的中心立方体数 long long a; //用于存储数字 a = (N-1)*(N-1)*(N-1) + N*N*N; //使用公式 (n-1)^3+n^3 return a; //返回存储在 a 中的值 } int main(){ int N; N=11; //调用函数 cout<<"N="<<N<<" 的中心立方体数为 "<<Nth_number(N)<<endl; N=28; cout<<"N="<<N<<" 的中心立方体数为 "<<Nth_number(N)<<endl; return 0; }
输出
N=11 的中心立方数为 2331 N=28 的中心立方数为 41635
时间复杂度:O(1),因为公式执行操作需要常数时间。
空间复杂度:O(1),因为我们在解决问题时没有使用任何额外空间。
结论
本文讨论了中心立方数的概念,以及中心立方数序列中数字之间的数学关系,以计算第 N 个中心立方数,我们在 C++ 中使用此方法在常数时间和空间内解决问题。
我希望阅读本文后,您对中心立方数的所有概念都清晰了。