中心十九边形数

data structurec++server side programmingprogramming

问题陈述包括打印 N 的任何正值的第 N 个中心十九边形数。

中心十九边形数是以特定图形模式表示的数字。此数字可以在图形中表示为中心的一个点,周围是十九边形的连续层。

十九边形是数学中的一种多边形,其中有 19 条边。十九边形的连续层表明,围绕中心点的第一层将是 19 边形,然后是 38 边形,依此类推。

通过下图可以更好地理解这些数字。

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

下一个数字表示为中心的一个点,周围是十九边形。因此,该数字将是 1+19=20。

下一个数字表示为中心点,周围是连续的十九边形层,即 19 边形和 38 边形,使得该数字为 1+19+38=58。

类似地,中心十九边形数字序列中的所有下一个数字都遵循相同的模式。我们可以按照数字模式得到任何中心十九边形数字。中心十九边形数列的前几个数字是1、20、58、115、191、286、400、533……

正整数N将是用户输入,我们需要打印与本问题中的N值相对应的中心十九边形数的值。

示例

输入:N = 5
输出:191

解释 − 给定的N值为5。中心十九边形数列中的第5个数字是191,它表示为中心的一个点,周围是4个连续的十九边形层。

输入:N=8
输出:533

解释 − 对应于 N 的中心十九边形数的值为 533,即第 8 个中心十九边形数。它表示为中心的一个点,周围是 7 个连续的十九边形层。

让我们按照数字中的模式来理解打印第 N 个中心十九边形数的算法。

算法

观察每个中心十九边形数所遵循的模式,我们可以找出一个表达式来计算第 N 个中心十九边形数。

可以清楚地看到,每个中心十九边形数都是 (N-1) 个连续层 + 1 的十九边形层的总和,因为第一个数字有 0 个十九边形层围绕中心的点,而第二个数字有一层围绕中心的点,第三个数字有 2 个连续层围绕中心的点,依此类推。

十九边形的前几个连续层是 19、38、57、76、95……

十九边形连续层的序列形成一个 AP,其第一项为 19(即 a=19),公差为 19(即 d=19)。我们可以说,每个 N 个中心的十九边形数都是 1 + 十九边形的 (N-1) 个连续层的总和,观察其后的数字模式。

(中心的十九边形)𝑁 = (𝑁 − 1) 𝑠𝑢𝑐𝑐𝑒𝑠𝑠𝑖𝑣𝑒 𝑙𝑎𝑦𝑒𝑟𝑠 𝑜𝑓 𝑡ℎ𝑒 𝑛𝑜𝑛𝑎𝑑𝑒𝑐𝑎𝑔𝑜𝑛 的总和 + 1

十九边形的 (N-1) 个连续层的总和十九边形可以使用 AP 的 n 项之和公式计算,因为十九边形的连续层形成 AP。

(中心十九边形)𝑁 = (𝑁 − 1) 𝑠𝑢𝑐𝑐𝑒𝑠𝑠𝑖𝑣𝑒 𝑙𝑎𝑦𝑒𝑟𝑠 𝑜𝑓 𝑡ℎ𝑒 𝑛𝑜𝑛𝑎𝑑𝑒𝑐𝑎𝑔𝑜𝑛 + 1 之和

十九边形的 (N-1) 个连续层之和可以使用 AP 的 n 项之和公式计算n 项 AP,因为十九边形的连续层形成 AP。

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

使用上述公式计算十九边形的 (N-1) 个连续层的总和,其中 a=19 且 d=19。

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

表达式可以进一步简化为,

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

中心十九边形数序列中的每个数字都可以用上述表达式的形式表示,其中 N 是第 N 个中心十九边形数。

我们将在我们的方法中使用此表达式$\mathrm{(\frac{19*N*(N−)}{2}+1)}$来获取任何大于 0 的 N 值的第 N 个中心十九边形数。

方法

在我们的方法中实现表达式以获得第 N 个中心十九边形数需要遵循的步骤−

  • 创建一个函数计算第 N 个中心十九边形数。

  • 创建一个变量来存储第 N 个数字的值。对于较大的 N 值,该变量应为 long long 数据类型,以存储中心十九边形数的值。

  • 使用公式 $\mathrm{\frac {19*N*(N−1)}{2}+1}$ 获取第 N 个中心十九边形数的值并将其存储在创建的变量中。

  • 返回该值并打印该值,因为该值将是我们所需的输出。

该方法的 C++ 代码 −

示例

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

using namespace std;

//函数用于计算任意 N 值的第 N 个中心十九边形数
long long number(int N){
    //存储第 N 个数
    long long n = (19*N*(N-1)/2)+1; //使用公式 19*N*(N-1)2+1
    return n; //返回第 N 个中心十九边形数
}
int main(){
    int N;
    N=11;
    //调用函数
    cout<<"第 N 个中心十九边形数为 "<<number(N)<<endl;
    N=20;
    cout<<"第 N 个中心十九边形数为 "<<number(N)<<endl;
    return 0;
}

输出

第 N 个中心十九边形数为 1046
第 N 个中心十九边形数为 3611

时间复杂度 − O(1) ,因为计算第 N 个中心十九边形数需要常数时间。

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

结论

我们在本文中讨论了中心十九边形数及其图形表示。我们推导出一个公式来表示任何 N 中心的十九边形数,使用每个数字后面的模式,我们在 C++ 中的方法中使用该公式来打印 N 中心的十九边形数。

希望您阅读本文后,所有概念都已清晰。


相关文章