C++で等差数列(算術級数)の和を求めるプログラム
初項「a」、公差「d」、項数「n」が与えられたとき、等差数列を生成し、その合計を計算するのが本プログラムの目的です。
等差数列(算術級数)とは
等差数列とは、隣り合う項の差が常に一定である数列のことです。数列の初項は「a」に固定され、項と項の間の共通の差(公差)は「d」で表されます。
数列は次のように表されます。
a, a + d, a + 2d, a + 3d, …
入力例と出力例
入力: a = 1.5, d = 0.5, n = 10 出力: 等差数列の合計は: 37.5 入力: a = 2.5, d = 1.5, n = 20 出力: 等差数列の合計は: 335
解き方のアプローチ
- 初項(a)、公差(d)、項数(n)を入力として受け取る
- n回のループを回しながら、初項を合計用の一時変数に加算し続け、初項を公差ずつ更新していく
- 最終的な合計値を出力する
アルゴリズム
開始
ステップ1: 数列の合計を求める関数を宣言する
float sum(float a, float d, int n)
float sum = 0 を設定
for (int i = 0; i < n; i++) のループを実行
sum = sum + a を設定
a = a + d を設定
ループ終了
sum を返す
ステップ2: main() 内で
int n = 10 を設定
float a = 1.5, d = 0.5 を設定
sum(a, d, n) を呼び出す
終了
サンプルコード
#include<bits/stdc++.h>
using namespace std;
// 数列の合計を求める関数
float sum(float a, float d, int n) {
float sum = 0;
for (int i = 0; i < n; i++) {
sum = sum + a;
a = a + d;
}
return sum;
}
int main() {
int n = 10;
float a = 1.5, d = 0.5;
cout<<"等差数列の合計は : "<<sum(a, d, n);
return 0;
}
出力
等差数列の合計は : 37.5
補足:公式を使った効率的な計算方法
ループを使わず、等差数列の和の公式を利用すれば、O(1) の計算量で合計を求めることもできます。
合計 S = n × (2a + (n − 1) × d) ÷ 2
この公式を使うと、項数 n が非常に大きい場合でも高速に計算できるため、実務ではこちらの方法が推奨されます。
-
C++で学ぶクイックソート(QuickSort)の仕組みと実装方法
クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率
-
最初のn個の自然数の二乗和を求めるC++プログラムの解説
はじめにこの記事では、最初のn個の自然数(1からnまで)の二乗和を求める方法について解説します。例えば、n = 4 の場合、計算結果は 1² + 2² + 3² + 4² = 1 + 4 + 9 + 16 = 30 となります。基本的なアプローチとしては、1からnまで繰り返すforループを使用し、各ステップで項の二乗を計算して合計に加算していく方法があります。このプログラムの計算量は O(n) です。しかし、O(1) の定数時間で解きたい場合は、次の級数の公式を利用できます。Σk² = n(n + 1)(2n + 1) / 6この公式を使えば、ループ処理を行わずに一発で答えを求めることが可能で