中心十八边形数


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

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

这些数字可以通过图形更好地解释。

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

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

中心十八边形数序列中的下一个数字表示为中心的一个点,周围环绕着十八边形的两个连续层,即 18 边形和 36 边形。因此,该数字将是 55。

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

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

示例 -

INPUT : N=4
OUTPUT : 109

**解释** - 在这里,我们得到 N=4。与 N 相对应的中心十八边形数的值,即第 4 个数字是 109,它表示为中心的一个点,周围环绕着十八边形的 3 个连续层。

INPUT : N=7
OUTPUT : 379

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

让我们尝试提出一种算法来解决上述算法。

算法

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

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

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

$$\mathrm{(中心十八边形)_N=1+十八边形(N−1)个连续层的总和}$$

等差数列前 n 项的总和可以通过以下公式求得,

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

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

$$\mathrm{(中心十八边形)_N=\frac{(N −1)}{2}(2*a+(N−2)d)+1}$$

将 a=18 和 d=18 代入,因为等差数列的首项为 18,公差也为 18。

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

$$\mathrm{(中心十八边形)_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。我们将在我们的方法中使用此表达式来有效地解决问题。

方法

以下是按照我们的方法实施算法的步骤 -

  • 我们将创建一个函数,以便为大于 0 的任何 N 值计算第 N 个中心十八边形数的值。

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

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

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

该方法的 C++ 代码 -

示例

//C++ code to print the N-th centered octadecagonal number
#include <bits/stdc++.h>

using namespace std;

//function to calculate the N-th centered octadecagonal number
long long Nth_num(int N){
   //store the N-th number in n
   long long n = 9*N*(N-1) + 1; //using the general expression of 
   
   // N-th centered octadecagonal number i.e. 9N(N-1)+1
   return n; //return the N-th number
}
int main(){
   int N;
   N=9;
   
   //calling the function
   cout<<"The N-th centered octadecagonal number is "<<Nth_num(N)<<endl;    
   N=17;
   cout<<"The N-th centered octadecagonal number is "<<Nth_num(N)<<endl;
   return 0;
}

输出

The N-th centered octadecagonal number is 649
The N-th centered octadecagonal number is 2449

**时间复杂度 - O(1)**,因为我们花费恒定时间执行操作。

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

结论

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

我希望在阅读本文后,您已经消除了关于该主题的所有疑问。

更新于: 2023 年 9 月 27 日

89 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.