C++で数列「3, 6, 18, 24, …」のN番目の項を求めるプログラム
この記事では、与えられた数値Nに対して、数列「3, 6, 18, 24, …」のN番目の項をC++で求めるプログラムを紹介します。
問題の説明
対象となる数列は以下のとおりです。
3, 6, 18, 24, 45, 54, 84 …(N項まで)
この数列の一般項(第N項を求める式)を見つけ出し、任意のNに対してその値を計算するのが課題です。
入力・出力例
入力: N = 10
出力: 150
解法のアプローチ
数列の一般項を求めるには、まず数列を注意深く観察し、規則性を探します。すべての項に3が共通していることに気づきますが、それだけでは一般化にはつながりません。
そこで、各項をその項番号n(1, 2, 3, …)で整理してみると、残りの部分に明確なパターンが現れます。具体的には、次のような構造になっています。
- nが偶数の場合:Tn = n × (n/2 + n)
- nが奇数の場合:Tn = n × (n/2 の切り捨て + 2 + n)
これらをまとめると、剰余演算(%)を使って次の一般項の公式が得られます。
数列の一般項
Tn = n × ( (n / 2) + ( (n % 2) × 2 ) + n )
ここで、n / 2 は整数除算、n % 2 はnを2で割った余りです。nが偶数なら余りは0、奇数なら1となり、奇数のときだけ2が加算される仕組みです。
検算してみましょう。
- n = 1:1 × (0 + 2 + 1) = 3
- n = 2:2 × (1 + 0 + 2) = 6
- n = 3:3 × (1 + 2 + 3) = 18
- n = 4:4 × (2 + 0 + 4) = 24
- n = 7:7 × (3 + 2 + 7) = 84
- n = 10:10 × (5 + 0 + 10) = 150
いずれも数列の値と一致しており、公式が正しいことが確認できます。
C++による実装例
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = ( N * ((N / 2) + ((N % 2) * 2) + N) );
return nthTerm;
}
int main() {
int N = 7;
cout << N << "番目の項の値は " << findNTerm(N);
return 0;
}実行結果
7番目の項の値は 84
まとめ
このプログラムでは、数列の各項を項番号nとの関係から分析し、整数除算と剰余演算を組み合わせた単一の一般項公式を導き出しました。このアプローチにより、ループで順に項を生成することなく、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