【C++】数列 1, 3, 12, 60, 360… のN番目の項を求めるプログラム
問題概要
この問題では、整数 N が与えられ、次の数列の N番目の項 を求めるC++プログラムを作成します。
対象となる数列
1, 3, 12, 60, 360, 2520 …(第N項まで)
入出力例で問題を確認しましょう
入力: N = 6
出力: 2520
解法アプローチ
この数列の一般項の公式は一見すると分かりにくいですが、項の値が急激に増大している点に注目すると、階乗 または 指数関数的な成長 が関係していると推測できます。
まず階乗を検討してみると、数列の増加率が階乗の値のおよそ半分になっていることが観察できます。さらに、初項が「2の階乗」に相当することもポイントです。これらの特徴から、一般項は次の公式で表せます。
TN = ((N+1)!) / 2
この公式が正しいことを確認してみましょう。N = 6 の場合、T6 = 7! / 2 = 5040 / 2 = 2520 となり、実際の数列と一致します。
解法の動作を示すプログラム
#include <iostream>
using namespace std;
// 階乗を再帰的に計算する関数
int calcFact(int n){
if(n == 1){
return 1;
}
return (n * calcFact(n - 1));
}
// 数列のN番目の項を求める関数
int findNTerm(int N) {
int nthTerm = ( (calcFact(N + 1)) / 2 );
return nthTerm;
}
int main()
{
int N = 8;
cout << N << "th term of the series is " << findNTerm(N);
return 0;
}
コードの解説
calcFact 関数は再帰呼び出しによって引数 n の階乗を計算します。findNTerm 関数はこの階乗関数を利用して (N+1)! を求め、それを2で割ることでN番目の項を算出しています。
出力結果
8th term of the series is 181440
このように、一般項 TN = ((N+1)!) / 2 を用いることで、任意の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