C++で数列 0, 11, 28, 51, 79, 115, 156, 203, … のN番目の項を求めるプログラム
本記事では、数列 0, 11, 28, 51, 79, 115, 156, 203, … のN番目の項を求めるプログラムを、C++で実装する方法を解説します。
問題の概要
整数Nが与えられたとき、上記の数列におけるN番目の項の値を求めるのが課題です。
入出力例
まず、具体的な例で問題を確認してみましょう。
- 入力: N = 5
- 出力: 79
解法のアプローチ
この数列は、隣り合う項同士の差が一定のペースで増えていく「二次数列」です。そのため、各項を順番に計算していく必要はなく、N番目の項を次の一般式から直接求めることができます。
Tn = 3 × N² + 2 × N − 5
たとえば N = 9 を代入すると、3 × 81 + 18 − 5 = 256 となり、後述のプログラムの実行結果と一致します。この式を使えば、ループで項を足し合わせる処理が不要になり、O(1)の計算量で任意のN番目の項を即座に求められる点が大きなメリットです。
解法の動作を示すサンプルプログラム
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = ((3 * N * N) + 2 * N - 5);
return nthTerm;
}
int main() {
int N = 9;
cout << N << "番目の項の値は " << findNTerm(N);
return 0;
}
実行結果:
9番目の項の値は 256
このように、数列の規則性を一般式として捉えられれば、Nがどれほど大きくなっても瞬時に答えを求められます。競技プログラミングやアルゴリズムの学習においても頻出のテクニックなので、ぜひマスターしておきましょう。
-
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