C++で数列 3, 12, 29, 54, 86, 128, 177, 234, … のN番目の項を求めるプログラム
このチュートリアルでは、数列 3, 12, 29, 54, 86, 128, 177, 234, … のN番目の項を求めるC++プログラムについて解説します。
ここでは、ある数値が与えられ、その位置に対応する数列の項を求めることが課題となります。
数列の一般項
まず、この数列の規則性を確認しましょう。隣接する項同士の差は次のようになっています。
- 12 − 3 = 9
- 29 − 12 = 17
- 54 − 29 = 25
差が一定ではなく、等差数列(9, 17, 25, …)をなしていることから、これは二次式で表せる数列であると分かります。実際、N番目の項は次の一般項で表されます。
a(n) = 4n² − 3n + 2
検算してみると、n = 1 のとき 4 − 3 + 2 = 3、n = 2 のとき 16 − 6 + 2 = 12、n = 3 のとき 36 − 9 + 2 = 29 となり、正しく数列と一致します。
プログラム例
#include <iostream>
#include <math.h>
using namespace std;
// 与えられた数列のN番目の項を計算する
int nthTerm(int n) {
return 4 * pow(n, 2) - 3 * n + 2;
}
int main() {
int N = 4;
cout << nthTerm(N) << endl;
return 0;
}出力結果
54
コードの解説
関数 nthTerm() では、一般項 4n² − 3n + 2 をそのまま計算して返しています。引数として受け取った位置 N を式に代入するだけで、目的の項をO(1)の計算量で求められるため、非常に効率的です。
上記の例では N = 4 を渡しているため、出力は数列の4番目の項である 54 となります。
-
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