C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】数列 9, 23, 45, 75, 113… のN番目の項を求めるプログラム


この問題では、整数 n が与えられ、それが数列の何番目の項であるかを表します。私たちの課題は、C++ を使って数列「9, 23, 45, 75, 113…」の N 番目の項を求めるプログラムを作成することです。

問題の概要

ここで求めるべきは、与えられた数列の一般項を導き出し、その式から第 n 項の値を計算することです。

対象となる数列は次のとおりです。

9, 23, 45, 75, 113, 159, 213, …

入出力例

  • 入力: n = 5
  • 出力: 159

解法アプローチ

まず、隣り合う項同士の差に注目してみましょう。

  • 23 − 9 = 14
  • 45 − 23 = 22
  • 75 − 45 = 30
  • 113 − 75 = 38

一次の差は一定ではありませんが、さらにその差同士の間隔(14, 22, 30, 38 …)を見ると、常に +8 ずつ増えていることがわかります。これは、この数列が N の2乗を含む二次式で表せることを示しています。

実際、この数列の一般項は次の式で表されます。

N番目の項 = (2×N + 3)2 − 2×N

この式を展開すると 4N2 + 10N + 9 となり、N = 0 のとき 9、N = 1 のとき 23、N = 2 のとき 45 と、数列の各項と完全に一致します。

C++による実装例

#include <iostream>
using namespace std;

int calcNTerm(int N) {
    int nthTerm = ( (2*N + 3)*(2*N + 3) - (2*N) );
    return nthTerm;
}

int main() {
    int n = 6;
    cout<<"Nth term of the series is "<<calcNTerm(n);
    return 0;
}

出力結果

Nth term of the series is 213

n = 6 を関数に渡した場合、(2×6 + 3)2 − 2×6 = 152 − 12 = 213 となり、正しく 213 が出力されていることが確認できます。

まとめ

本記事では、数列「9, 23, 45, 75, 113…」の一般項 (2N + 3)2 − 2N を導き、C++ で N 番目の項を O(1) の計算量で求めるプログラムを実装しました。数列の問題では、まず項の差を調べて規則性(等差・等比・二次関係など)を見つけ出すことが、一般項を導くための重要な第一歩となります。

  1. C++で数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラム

    この問題では、数値 N が与えられ、C++を用いて数列 1, 2, 11, 12, 21… のN番目の項を求めるプログラムを作成します。 問題の概要 次の数列のN番目の項を求めます。 1, 2, 11, 12, 21, 22, 111, 112, …(第N項まで) この数列には一定のパターンが隠されており、それをもとに一般項を導き出す必要があります。 具体例を見てみましょう。 入力 N = 8 出力 112 解法のアプローチ 一般項を導くためには、まず数列を注意深く観察することが重要です。この数列には次のような特徴があります。 すべての項が「1」と「2」のみで構成されている。 各項の末尾の

  2. C++で数列3、5、33、35、53…のN番目の項を求めるプログラム

    はじめにこのチュートリアルでは、数列「3、5、33、35、53…」のN番目の項を求めるC++プログラムについて解説します。この問題では、ある整数nが与えられます。私たちのタスクは、その数列におけるn番目の項を特定することです。数列の規則性まず、この数列がどのように構成されているのかを見てみましょう。1番目の項:32番目の項:53番目の項:33(1番目の項に「3」を付加)4番目の項:35(1番目の項に「5」を付加)5番目の項:53(2番目の項に「3」を付加)6番目の項:55(2番目の項に「5」を付加)つまり、奇数番目の項は「i/2 番目の項の末尾に3を付けた数」、偶数番目の項は「(i/2 − 1