C++で最初のN個の自然数の平均を求める方法
この記事では、数値nが与えられたときに最初のN個の自然数の平均を求める方法について解説します。
平均とは、すべての数値の合計をその個数で割った値として定義されます。つまり、最初のN個の自然数の平均は、「1からNまでの自然数の合計」を「N」で割った値ということになります。
問題の例
入力 : N = 23 出力 : 12
説明:
1 + 2 + 3 + ... + 22 + 23 = 276 276 / 23 = 12
解法のアプローチ
平均を求めるためには、以下の基本的な公式を使用します。
Average = sum(N) / N
Average = (1 + 2 + 3 + ... + N) / N
ここで、最初のN個の自然数の合計は、等差数列の和の公式から次のように表せます。
sum = N × (N + 1) / 2
この合計の公式を平均の式に代入すると、次のように簡略化できます。
Average = (N × (N + 1)) / (2 × N) = (N + 1) / 2
この公式を使えば、ループ処理を一切行わずにO(1)の時間計算量で平均を算出できます。Nが非常に大きい場合でも高速に動作するのが大きな利点です。
実装例
以下は、上記の解法の動作を示すC++プログラムです。
#include <iostream>
using namespace std;
float calcAverage(int n) {
return (float)( ((float)n + 1 )/2 );
}
int main() {
int N = 45;
cout<<"最初の "<<N<<" 個の自然数の平均は "<<calcAverage(N);
return 0;
}出力結果
最初の 45 個の自然数の平均は 23
まとめ
最初のN個の自然数の平均は、数学的な公式 (N + 1) / 2 を利用することで、シンプルかつ効率的に計算できます。整数同士の除算による切り捨て誤差を防ぐため、コード内では float 型へのキャストを行っている点にも注目してください。
-
配列の要素の積の最初の桁を求めるC++プログラム
はじめにこの記事では、与えられた配列のすべての要素を掛け合わせた積の、最初の桁(最上位の桁)を求めるプログラムについて解説します。例として、次のような配列が与えられたとします。arr = {12, 5, 16}これらの要素の積は、12 × 5 × 16 = 960 となります。したがって、求める結果、つまり積の最初の桁は「9」になります。アルゴリズム変数 prod を 1 で初期化するループを使い、配列の各要素を順番に prod に掛けていくprod が 10 以上である間、prod を 10 で割り続ける残った一桁の値が、積の最初の桁となるサンプルコード#include <bits/s
-
PHPで最初のn個の偶数の平均を求めるプログラム
はじめに 最初のn個の偶数(2、4、6、8、…、2n)の平均は、実はとてもシンプルな式で表すことができます。偶数の合計は 2 + 4 + … + 2n = n(n + 1) となるため、これを個数 n で割ると、平均は必ず n + 1 になります。 この数学的性質を活かせば、ループで合計を計算する必要すらなく、定数時間 O(1) で答えを導き出せます。以下がそのPHPコードです。 サンプルコード <?php function even_nums_avg($val) { return $val + 1; } $val = 11; print_