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

数列 2、12、28、50、77、112、152、198、… の第N項をC++で求めるプログラム


この問題では、整数 N が与えられ、C++ を用いて数列「2, 12, 28, 50, 77, 112, 152, 198, …」の第 N 項を求めるプログラムを作成します。

問題の概要

与えられた数列の第 N 項を求めることが課題です。

対象となる数列: 2, 12, 28, 50, 77, 112, 152, 198, ...(全 N 項)

入出力例

入力: N = 6
出力: 112

解法アプローチ

この数列は、項が進むにつれて増加幅が広がっていく、いわゆる放物線状(二次曲線的)な増加を示しています。そのため、一般項は二次式で表せると推測できます。実際に各項を N の式で整理すると、次の一般公式が得られます。

TN = 3 × N² + N − 2

この公式を具体的な値で検証してみましょう。

  • N = 1 のとき:3×1² + 1 − 2 = 2
  • N = 2 のとき:3×2² + 2 − 2 = 12
  • N = 3 のとき:3×3² + 3 − 2 = 28
  • N = 6 のとき:3×6² + 6 − 2 = 112

このように一般項を明示的な式として導出できれば、ループで項を順に計算する必要がなく、O(1) の計算量で任意の第 N 項を直接求めることができます。

プログラム実装例

#include <iostream>
using namespace std;

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

int main() {
    int N = 10;
    cout << N << "番目の項の値は " << findNTerm(N);
    return 0;
}

実行結果

10番目の項の値は 308

コードの解説

findNTerm 関数は、一般項の公式 TN = 3N² + N − 2 に引数 N を代入し、第 N 項の値を計算して返します。main 関数では N = 10 を設定して関数を呼び出し、その結果を標準出力に表示しています。

この手法の計算量は以下の通りです。

  • 時間計算量: O(1)
  • 空間計算量: O(1)

数列の規則性を見抜いて一般項を二次式として表現できれば、非常に大きな N に対しても瞬時に答えを求められる点が、このアプローチの大きな利点です。

  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