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

C++で数列 0, 9, 22, 39, 60, 85, 114, 147,… の第N項を求めるプログラム

問題概要

この記事では、数値 N が与えられたときに、次の数列の第 N 項を求める C++ プログラムの作成方法を解説します。

0, 9, 22, 39, 60, 85, 114, 147, …(全 N 項)

入出力の例

  • 入力: N = 6
  • 出力: 85

この例では、数列の 6 番目の項が 85 であるため、出力は 85 になります。プログラムの目的は、任意の N に対して対応する項の値を正しく返すことです。

解法のアプローチ:一般項を導出する

数列の第 N 項を求めるには、まず数列の一般項(N を使った式)を導出します。そのために、各項の値がどのように増加しているのかを観察してみましょう。

項番号 N前項との差(階差)
10
29+9
322+13
439+17
560+21
685+25

階差を見ると、9 → 13 → 17 → 21 → 25 と、毎回一定量(+4)ずつ増えていることが分かります。「階差が等差数列になる」とき、元の数列は放物線状に成長する二次数列であり、一般項は二次式で表せることが知られています。

さらに計算を進めると、この数列の一般項は次の公式で表されます。

TN = 2 × N2 + 3 × N − 5

公式の検証

  • N = 1 のとき:2×1 + 3×1 − 5 = 0 ✔
  • N = 2 のとき:2×4 + 3×2 − 5 = 9 ✔
  • N = 6 のとき:2×36 + 3×6 − 5 = 85 ✔

実際の数列と一致していることが確認できます。

C++ プログラムの実装

#include <iostream>
using namespace std;

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

int main()
{
    int N = 8;
    cout<<N<<"th term of the series is "<<findNTerm(N);
    return 0;
}

実行結果

8th term of the series is 147

コードの解説

findNTerm 関数: 引数として受け取った N に対して、一般項の公式 TN = 2N2 + 3N − 5 を計算し、その値を返します。
main 関数: 変数 N に 8 を設定し、findNTerm を呼び出して第 8 項の値を出力します。

まとめ

数列のパターンを観察して一般項を導出できれば、ループで項を順番に計算する必要はなく、任意の第 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