C++で数列 1, 4, 15, 24, 45, 60, 92… のN番目の項を求めるプログラム
この問題では、整数 N が与えられます。求めるのは、C++ を使って数列「1, 4, 15, 24, 45, 60, 92, 112 …」の N 番目の項を計算するプログラムです。
問題の概要
与えられた数列の第 N 項を求めることが課題です。
対象となる数列:1, 4, 15, 24, 45, 60, 92, 112 …(N 項)
まずは、この数列の一般項(一般式)を見つけるところから始めましょう。
入出力例
入力:N = 6
出力:60
解き方のアプローチ
この数列の一般項は、N が偶数か奇数かによって変わります。一見すると規則性をつかみにくい数列ですが、「奇数番目」と「偶数番目」という2つの部分数列に分けて考えれば、一般項はとても簡単に導き出せます。
一般項は次の通りです。
TN = 2 × N² − N (N が奇数の場合) TN = 2 × (N² − N) (N が偶数の場合)
実際に式を当てはめて確認してみましょう。
- N = 1(奇数):2×1² − 1 = 1
- N = 2(偶数):2×(2² − 2) = 4
- N = 3(奇数):2×3² − 3 = 15
- N = 4(偶数):2×(4² − 4) = 24
- N = 6(偶数):2×(6² − 6) = 60
このように、公式が正しく数列の各項と一致していることがわかります。
プログラムの実装例
上記のロジックを C++ で実装したものが次のコードです。関数 findNTerm() の中で、N を 2 で割った余りによって偶数・奇数を判定し、対応する式で第 N 項を返しています。
#include <iostream>
using namespace std;
int findNTerm(int N) {
if (N % 2 == 0)
return (2 * ((N * N) - N));
return ((2 * (N * N)) - N);
}
int main() {
int N = 10;
cout << N << " 番目の項の値は " << findNTerm(N);
return 0;
}
実行結果:
10 番目の項の値は 180
N = 10 は偶数なので、2×(10² − 10) = 2×90 = 180 となり、正しい結果が得られています。このアプローチの計算量は O(1) であり、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