中心十八邊形數


問題包括列印第 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 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告