【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) の計算量で求めるプログラムを実装しました。数列の問題では、まず項の差を調べて規則性(等差・等比・二次関係など)を見つけ出すことが、一般項を導くための重要な第一歩となります。
-
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」のみで構成されている。 各項の末尾の
-
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