中心十八边形数
问题包括打印第 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++ 中以恒定时间和空间内完成。
我希望在阅读本文后,您已经消除了关于该主题的所有疑问。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP