C++
 Computer >> コンピューター >  >> プログラミング >> C++

数列 1、4、15、72、420… のN番目の項を求めるC++プログラム

この記事では、整数 N が与えられたときに、次の数列のN番目の項を求めるプログラムをC++で作成します。

対象となる数列: 1, 4, 15, 72, 420…

入力と出力の例

入力

N = 4

出力

72

解法のアプローチ

この問題を効率的に解くには、数列のパターンを観察して、N番目の項を表す一般式(公式)を導き出すことが重要です。

まず、この数列は「階乗」と「ある変数」の積として表現できることに注目してみましょう。

1, 4, 15, 72, 420…
1!*(X1), 2!*(X2), 3!*(X3), 4!*(X4), 5!*(X5)...
1*(1), 2*(2), 6*(5/2), 24*(3), 120*(7/2)...

ここで、各項に掛かっている係数の系列を取り出すと、次のようになります。

1, 2, 2.5, 3, 3.5…

この係数の系列は、{(n+2)/2} という式で一般化できます。つまり、n=1のとき1、n=2のとき2、n=3のとき2.5という具合に、0.5ずつ増加していく規則性があります。

以上のことから、N番目の項を求める公式は次のように導けます。

T(N) = N! × (N + 2) / 2

C++による実装例

それでは、上記の解法がどのように動作するのかを示すプログラムを見てみましょう。

サンプルコード

#include <iostream>
using namespace std;
int calcFactorial(int N) {
    int factorial = 1;
    for (int i = 1; i <= N; i++)
        factorial = factorial * i;
        return factorial;
}
int calcNthTerm(int N) {
    return (calcFactorial(N) * (N + 2) / 2);
}
int main() {
    int N = 7;
    cout<<N<<"th term of the series is "<<calcNthTerm(N);
    return 0;
}

実行結果

7th term of the series is 22680

プログラムの解説

このプログラムは、大きく分けて2つの関数で構成されています。

calcFactorial関数: 引数として受け取った整数Nの階乗(N!)を計算します。forループを使い、1からNまでの値を順番に掛け合わせることで階乗を求めています。

calcNthTerm関数: 先ほど導出した公式「T(N) = N! × (N + 2) / 2」に基づいて、N番目の項の値を計算して返します。内部でcalcFactorial関数を呼び出して階乗を取得しています。

main関数では N = 7 を設定して計算を行っており、実行すると「7番目の項は22680」という結果が出力されます。実際に検証してみると、7! × (7+2) / 2 = 5040 × 9 / 2 = 22680 となり、正しく計算できていることが確認できます。

まとめ

数列の一般項を求める問題では、まず各項を分解してパターンを見つけることが鍵となります。今回の例では、数列を「階乗」と「等差数列的な係数」の積に分解することで、シンプルな公式 T(N) = N! × (N + 2) / 2 を導き出せました。この手法は、一見複雑な数列でも規則性を見抜くことで効率的に解けることを示す良い例です。

  1. C++で数列a、b、b、c、c、cのN番目の項を求めるプログラム

    この問題では、数Nが与えられます。私たちのタスクは、C++で数列a、b、b、c、c、c…のN番目の項を求めるプログラムを作成することです。問題の説明次の数列のN番目の項を求めます。a、b、b、c、c、c、d、d、d、d、....(全N項)そのためには、この数列の一般項を見つける必要があります。具体例を使って問題を理解しましょう。入力:N = 7出力:d解法アプローチ数列の一般項を求めるには、まず数列を注意深く観察する必要があります。この数列は「a」が1個、「b」が2個、「c」が3個、「d」が4個…というように、同じ文字が増えていきながら繰り返される構成になっています。これは初項aと公差dがどち

  2. 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」のみで構成されている。 各項の末尾の