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

数列 5, 2, 19, 13, 41, … の第N項を求めるC++プログラム

この問題では、整数 N が与えられ、「5, 2, 19, 13, 41, 31, 71, 57 …」という数列の第N項を求めるプログラムを作成します。

まず、具体例を使って問題を確認しましょう。

入力

N = 5

出力

41

説明

この数列は「5, 2, 19, 13, 41, …」と続いていきます。第5項にあたる値は41です。

解法アプローチ

本問題を効率的に解くには、数列の一般項(第N項を表す公式)を利用します。ポイントは、この数列がNの偶奇によって異なる規則性を持っているという点です。具体的には、次の式で第N項を求められます。

Nが偶数の場合(N % 2 == 0):第N項 = (N−1)² + N
Nが奇数の場合(N % 2 != 0):第N項 = (N+1)² + N

この公式を用いれば、数列を先頭から順に生成する必要がなく、O(1)の定数時間で第N項を直接計算できます。

実際に検証してみましょう。N=5(奇数)の場合は (5+1)² + 5 = 36 + 5 = 41、N=6(偶数)の場合は (6−1)² + 6 = 25 + 6 = 31 となり、いずれも実際の数列と一致します。

それでは、この解法の動作を示すプログラムを見てみましょう。

サンプルコード(C++)

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

実行結果

7th term of the series is 71

まとめ

このように、偶奇ごとの一般項を事前に導出しておけば、ループ処理を行わずに任意のN番目の項を即座に計算できます。計算量はO(1)であるため、非常に大きなNが与えられた場合でも高速に動作するのが大きな魅力です。

  1. C++で数列 3, 5, 21, 51, 95, … のN番目の項を求めるプログラム

    この記事では、数値Nが与えられたときに、C++を使って数列 3, 5, 21, 51, 95, … のN番目の項を求めるプログラムの作成方法を解説します。 問題の説明 次の数列のN番目の項を求めるのが課題です。 3, 5, 21, 51, 95, 153, …(N項まで) この数列は各項の増加パターンから、二次方程式(二次関数)に従うことがわかります。したがって、まず数列の一般項の公式を導き出す必要があります。 入出力例 入力: N = 6 出力: 153 解決アプローチ この問題を解くには、数列の一般項(第n項)の公式を求めます。この数列の一般項は、以下の二次式で表されます。 Tn = 7

  2. C++で指定された数列のN番目の項を求めるプログラム

    この問題では、数値 N が与えられ、指定された数列のN番目の項を求めるプログラムをC++で作成します。 問題の説明 次の数列のN番目の項を求めます。 1, 1, 2, 3, 4, 9, 8, 27, 16, 81, 32, 243, 64, 729, 128, 2187, 256, ... (N項まで) まずは、この数列の一般項(規則性)を見つけるところから始めます。 具体例で問題を確認してみましょう。 例1 入力: N = 6 出力: 9 例2 入力: N = 13 出力: 64 解法のアプローチ この問題を解くには、まず数列を注意深く観察する必要があります。この数列は複数の規則が混ざった「