中心十八边形数

data structurec++server side programmingprogramming

问题包括打印第 N 个中心十八边形数,其中 N 将作为输入给出。

中心十八边形数是一种形象数,表示为中心的一个点,周围是十八边形的连续层。十八边形是具有 18 条边的多边形。十八边形的连续层是第一层是 18 边形,下一层是 36 边形,依此类推。

借助数字可以更好地解释数字。

第一个数字表示为中心的一个点,因此第一个中心十八边形数字是 1。

中心十八边形数字序列中的第二个数字表示为中心的一个点,周围是十八边形。因此,该数字将为 19。

中心十八边形数列中的下一个数字表示为中心的一个点,该点被十八边形的两个连续层(即 18 边形和 36 边形)包围。因此,该数字将为 55。

按照下图中的相同模式,我们可以计算中心十八边形数列中的下一个数字。前几个中心十八边形数是1、19、55、109、181、271、379……。

在这个问题中,N将作为输入提供,我们需要打印与N值相对应的中心十八边形数的值。

示例−

输入:N = 4
输出:109

解释−这里我们给出N = 4。与 N 对应的中心十八边形数(即第 4 个数字)的值是 109,表示为中心的一个点,周围是十八边形的 3 个连续层。

输入:N=7
输出:379

解释 - 第 7 个中心十八边形数是 379,表示为中心的一个点,周围是十八边形的 6 个连续层,即 18、36、54、72、90 和 108。

让我们尝试想出一个算法来解决上述算法。

算法

解决这个问题的算法背后的想法是通过观察每个中心的模式八面体数。正如我们在数字的图形表示中所看到的,每个数字都表示为中心的一个点,周围是十八边形的连续层。

任何中心十八边形数都可以通过 1 + (N-1) 个十八边形连续层的总和来找到。十八边形的连续层数为18、36、54、72……,构成一个AP,其首项a=18,公差d=18。

第N个中心十八边形数可以表示为数学关系式−

$$\mathrm{(centered \: octadecagonal)_N=1+sum \:of(N−1)successive \: levels \: of \: an \: octadecagon}$$

AP的前n项之和可以通过以下方式求得:

$$\mathrm{S_n=\frac{n}{2}(2*a+(n−1)d)}$$

要求得十八边形连续层的前(N-1)项,我们可以使用上述公式。

$$\mathrm{(centered \: octadecagonal)_N=\frac{(N −1)}{2}(2*a+(N−2)d)+1}$$

将 a=18 和 d=18 替换为 AP 的第一项为 18,公差也为 18。

$$\mathrm{(centered \: octadecagonal)_N=\frac{(N −1)}{2}(2*18+(N − 2)*18)+1}$$

$$\mathrm{(centered \:十八边形)_N=\frac{18*(N − 1)}{2}(2+N − 2+1)}$$

$$\mathrm{=\frac{18*N*(N − 1)}{2}+1}$$

$$\mathrm{9N(N −1)+1}$$

每个 N 中心十八边形数都可以通过上述表达式找到,即 9𝑁(𝑁 − 1) + 1,其中 N>0。我们将在我们的方法中使用此表达式来有效地解决问题。

方法

下面是在我们的方法中实现算法的步骤 -

  • 我们将创建一个函数来计算 N 中心十八边形数的值,其中 N 的值大于 0。

  • 创建一个变量来存储第 N 个数字的值。我们必须确保变量是 long long 数据类型,以便存储较大 N 值的数字。

  • 使用公式 9N(N − 1) + 1 获取第 N 个中心十八边形数并将其存储在创建的变量中。

  • 返回数字并打印它,这将是我们所需的输出。

该方法的 C++ 代码 −

示例

//C++ 代码打印第 N 个中心十八边形数
#include <bits/stdc++.h>

using namespace std;

//函数计算第 N 个中心十八边形数
long long Nth_num(int N){
    //将第 N 个数存储在 n 中
    long long n = 9*N*(N-1) + 1; //使用一般表达式
    
    //第 N 个中心十八边形数,即 9N(N-1)+1
    return n; //返回第 N 个数
}
int main(){
    int N;
    N=9;
    
    //调用函数
    cout<<"第 N 个中心十八边形数为 "<<Nth_num(N)<<endl;
    N=17;
    cout<<"第 N 个中心十八边形数为 "<<Nth_num(N)<<endl;
    return 0;
}

输出

第 N 个中心十八边形数为 649
第 N 个中心十八边形数为 2449

时间复杂度 − O(1) ,因为我们花费了常数时间来执行操作。

空间复杂度 − O(1) ,因为没有占用额外的空间。

结论

本文讨论了与中心十八边形数相关的概念及其以图形形式的表示。我们推导出了 N 中心十八边形数的公式,并在我们的方法中使用该公式在 C++ 中在恒定时间和空间内有效地解决问题。

希望您在阅读本文后已经消除了对该主题的所有疑虑。


相关文章